• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

cristpate

SESSOES EM PHP

16 mensagens neste tópico

alo a todos

eu estou usando sessoes em na minha aplicaçao mas nao esta a funcionar plenamente, isto e, quando termina a sessao e faço back com o botao do windows remete me a pagina que eu estava a visualizar antes de terminar a sessao e isso nao garante a segurnça dos dados

ajudem me

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

acrescenta às páginas no topo

<?php
session_cache_limiter('private');
?>

isto vai obrigar a que o browser mesmo quando se faz back a pedir de novo a página. Assim o teu script pode ver se a sessão é válida ou não e reagir de acordo

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

acrescentei e nao mudou em nada

vou lhe por a par da estrutura da minha aplicaçao:

tenho uma pagina para login onde e validado o nome e a senha verificadas os dois parametros visualiza-se a pagina principal onde tem o botao de logout.

para iniciar a sessao estou a usar somente session_start(); que pus num ficheiro e e requerido pela pagina principal atravez do require e para destruir a sessao uso

session_start();

session_destroy();

header("Location: user_validacao.php");

nao sei se falta alguma coisa?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu faria algo como isto:

Todas as páginas da aplicação (excepto a que trata de iniciar a sessão e a do não autorizado) começariam assim:

<?php
  include('sessaovalida.php');
//...

sessaovalida.php

<?php
session_cache_limiter('private'); //é importante estar antes do session_start
session_start();
if(!isset($_SESSION['sessaovalida']) || $_SESSION['sessaovalida']==0) {
   header('Location: naoautorizado.php');
   exit(0); //terminar mesmo a execução do script, para fazer o redireccionamento
}
?>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

mas quando ponho esse codigo

ao fazer a validacao, a aplicaçao remete me a pagina a pagina invalido.php

if(!isset($_SESSION['sessaovalida']) || $_SESSION['sessaovalida']==0) {

  header('Location: invalido.php');

  exit(0); //terminar mesmo a execução do script, para fazer o redireccionamento

}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

deve faltar iniciar sessão...

login.php

<?php
session_cache_limiter('private');
session_start();

$user = $_POST['username'];
$pass = $_POST['password'];

/*
  buscar a pass correcta a uma BD, p.ex.
*/

  if($pass==$passCorrecta) {
      $_SESSION['sessaovalida']=1; //ou user_id
      header('Location: paginaaplicação.php');
  }
  else {
      $_SESSION['sessaovalida']=0;
      header('Location: loginfailed.php');
  }
?>

e

logout.php

<?php
session_cache_limiter('private');
session_start();
$_SESSION['sessaovalida']=0;
header('Location: index.html');
?>

e agora descobri uma coisa nova...

da documentação

session_destroy() destroys all of the data associated with the current session. It does not unset any of the global variables associated with the session, or unset the session cookie.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes fazer antes do session_destroy(); um session_unset();

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu tentei por essa ideia: session_destroy(); um session_unset(); mas nao resultou, mas quando vou a pasta tmp do servidor onde ele guarda os ficheiros das sessoes vejo que quando pressiono o botao para destruir a sessao, o ficheiro desaparece mas vou e faço back com o botao do windows ele volta a me dar acesso a pagina anterior

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E utilizaste na mesma isto?

session_cache_limiter('private');

E nesse página estás a verificar a sessão?

EDIT: Já agora tens que fazer o unset antes do destroy.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E nesse página estás a verificar a sessão?

como assim?

se ela foi iniciada ou nao?

nao.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então como é que queres que o script saiba se deve fornecer a página ou não?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não viste o exemplo do edsousa? Depois só precisas de verificar à variável de sessão sessaovalida

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

obrigadob boy

ja vou tentar

eu fiquei um pouco atrapalhado porque sao as minhas primeiras experiencias com php

thanks

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá,

Estou a ver que estás a utilizar uma variável de sessão para verificar se o utilizador está correctamente autenticado para ver o conteúdo baseado apenas no valor.

Se alguém ver o valor do cookie válido na rede pose utilizar para eludir o sistema. Uma forma simples de aumentar um pouco mais a dificuldade de conseguir acesso sem autorização é guardar o máximo de informação sobre o utilizador a quando do login e confrontar sempre que é validada a sessão.

Fica aqui um exemplo que valida com base no IP e Sessão,

public function valida_sessao(){

    //valida a sessao
    if(isset($_SESSION["uid"])){

        // verifica se ainda existe registo na base de dados desta sessão
        $res=$this->bd->sql("SELECT * FROM utilizador WHERE id='".$_SESSION['uid']."'  AND     
                                        ip='".$_SERVER['REMOTE_ADDR']."' AND sessao='".session_id()."'");

        if($res->nlinhas>0){
            return true;
        }
    }

    return false;

}

Até Já,

Silvino

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora