GraCasBa 0 Denunciar post Postado Janeiro 17, 2012 Como faço para encerrar uma sessao, preciso destruir uma sessao, quando clico em sair ele passa pela função sair vai para a pagina de login ate ai tudo bem, mas se eu digitar na url o endereço de qualquer pagina do programa ele vai sem precisar logar, ja tentei de tudo e não destroi a sessao, alguem pode me ajudar fazendo favor. Desde ja obrigada. Compartilhar este post Link para o post Compartilhar em outros sites
Flávio Douglas Nunes 5 Denunciar post Postado Janeiro 17, 2012 Como faço para encerrar uma sessao, preciso destruir uma sessao, quando clico em sair ele passa pela função sair vai para a pagina de login ate ai tudo bem, mas se eu digitar na url o endereço de qualquer pagina do programa ele vai sem precisar logar, ja tentei de tudo e não destroi a sessao, alguem pode me ajudar fazendo favor. Desde ja obrigada. Para destruir a sessão basta você utilizar a função session_destroy() do PHP. Compartilhar este post Link para o post Compartilhar em outros sites
GraCasBa 0 Denunciar post Postado Janeiro 17, 2012 Já estou usando e não destroi :upset: Compartilhar este post Link para o post Compartilhar em outros sites
Flávio Douglas Nunes 5 Denunciar post Postado Janeiro 17, 2012 Já estou usando e não destroi :upset: Pode me mostrar o codigo, para ver como você está criando essa sessão? Compartilhar este post Link para o post Compartilhar em outros sites
GraCasBa 0 Denunciar post Postado Janeiro 17, 2012 Flavio é assim Depois que faz o login tem duas opções, cadastrar usuario e sair echo "| <a href='?acao=inserir'>Inserir Usuario</a>"; echo "| <a href=\"formlogin.php?acao=sair\">Sair</a>|</li><br></br><br></br>"; Tem uma parte no formlogim assim: if ($_GET['acao'] == "sair") { // Desautentica o usuário, destruindo a sessão e redirecionando o usuário // para a página de login $this->sair(); } echo "<h1>Autenticacao do Usuario</h1>"; A função é essa private function sair() { //se sair destruir a sessao // Unset all of the session variables. $_SESSION = array(); // If it's desired to kill the session, also delete the session cookie. // Note: This will destroy the session, and not just the session data! if (isset($_COOKIE[session_name()])) { //setcookie(session_name(), '', time()-42000, '/'); unset($_COOKIE[session_name()]); } // Finally, destroy the session. session_unset(); session_destroy(); parent::printMensagemSucesso("Saída do sistema realizada com sucesso."); } Ja tentei essa tbm, tentei criar um arquivo chamado logout session_start(); unset($_SESSION['id']); unset($_SESSION['nome']); unset($_SESSION['login']); header("Location: formlogin.php"); Já tentei de tudo eu acho e não da certo. Obrigada por ta me ajudando :grin: Compartilhar este post Link para o post Compartilhar em outros sites
ArantesProg 0 Denunciar post Postado Janeiro 17, 2012 Tem-se que prestar atencao no trecho de codigo onde a chamada para $this->sair() e feita. A qual objeto ela se refere ? Trata-se de um metodo privado, logo nao pode ser acessado de fora da classe. Poste mais detalhes da implementacao. Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Janeiro 17, 2012 mesmo para remover a sessão é necessário inciá-la antes: Certifique-se, também, de remover o cookie identificador de sessão session_destroy() destrói todos os dados associados com a sessão atual. Ela não desregistra nenhuma das variáveis globais associadas a sessão atual, nem desregistra o cookie de sessão. Para poder matar a sessão junto, como para fazer o log out do usuário, o id da sessão também deve ser desregistrado. Se for usado um cookie para propagar o id de sessão (funcionamento padrão), então o cookie de sessão deve ser excluído. setcookie() pode ser usado para isso. Visto isso, o mínimo de linhas necessárias para remover uma sessão com segurança seguem abaixo: // inicia o manipulador de sessão session_start(); // recupera o nome do identificador de sessão $cookie_name = session_name(); // elimina todas as informações relacionadas à sessão atual session_destroy(); // encerra o manipulador de sessão session_write_close(); // limpa o cookie identificador de sessão setcookie($cookie_name, '', time()); Compartilhar este post Link para o post Compartilhar em outros sites
GraCasBa 0 Denunciar post Postado Janeiro 17, 2012 Tem-se que prestar atencao no trecho de codigo onde a chamada para $this->sair() e feita. A qual objeto ela se refere ? Trata-se de um metodo privado, logo nao pode ser acessado de fora da classe. Poste mais detalhes da implementacao. Oi Estava private ai mudei para public e ainda não deu certo esse $this->sair() fica na mesma classe que a função public function sair. Obrigada por esta me ajudando mesmo para remover a sessão é necessário inciá-la antes: Certifique-se, também, de remover o cookie identificador de sessão Visto isso, o mínimo de linhas necessárias para remover uma sessão com segurança seguem abaixo: // inicia o manipulador de sessão session_start(); // recupera o nome do identificador de sessão $cookie_name = session_name(); // elimina todas as informações relacionadas à sessão atual session_destroy(); // encerra o manipulador de sessão session_write_close(); // limpa o cookie identificador de sessão setcookie($cookie_name, '', time()); Oi, Coloquei esse codigo que você me passou e não adiantou :upset: Obrigada por ta me ajudando Compartilhar este post Link para o post Compartilhar em outros sites
ArantesProg 0 Denunciar post Postado Janeiro 17, 2012 Cara, vamos la. Poste o codigo desta classe inteira para tentarmos identificar o problema. Acredito que alguma chamada equivocada de metodo esteja influenciando. Compartilhar este post Link para o post Compartilhar em outros sites
GraCasBa 0 Denunciar post Postado Janeiro 18, 2012 Cara, vamos la. Poste o codigo desta classe inteira para tentarmos identificar o problema. Acredito que alguma chamada equivocada de metodo esteja influenciando. Oi ArentesProg então vou tenta explica como é meu programa ele tem varias classes entre elas uma classe formlogin para fazer a parte de login so entra pessoas autorizadas e a outra classe usuario onde as pessoas autorizadas possa cadastra mais pessoas, na classe usuario pussui um campo para cadastra usuarios e sair assim: echo "| <a href='?acao=inserir'>Inserir Usuario</a>"; echo "| <a href=\"formlogin.php?acao=sair\">Sair</a>|</li><br></br><br></br>"; na classe formlogin possui uma parte assim:... if ($_GET['acao'] == "sair") { // Desautentica o usuário, destruindo a sessão e redirecionando o usuário // para a página de login $this->sair(); } echo "<h1>Autenticacao do Usuario</h1>"; na mesma classe formlogin tem a função sair assim: public function sair() { //se sair destruir a sessao // Unset all of the session variables. $_SESSION = array(); // If it's desired to kill the session, also delete the session cookie. // Note: This will destroy the session, and not just the session data! if (isset($_COOKIE[session_name()])) { //setcookie(session_name(), '', time()-42000, '/'); unset($_COOKIE[session_name()]); } // Finally, destroy the session. session_unset(); session_destroy(); parent::printMensagemSucesso("Saída do sistema realizada com sucesso.");} a função tava private coloquei public e nao adiantou coloquei tbm como o Evandro falo tbm não adiantou não sei mais oq fazer. Não sei se deu para entender, senao me fala que tento esclarecer melhor Obrigada por ta me ajudando Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Janeiro 18, 2012 Veja que a linha que remove o cookie está comentada if (isset($_COOKIE[session_name()])) { //setcookie(session_name(), '', time()-42000, '/'); <<<<< unset($_COOKIE[session_name()]); } Compartilhar este post Link para o post Compartilhar em outros sites
ArantesProg 0 Denunciar post Postado Janeiro 18, 2012 Entao cara, eh o seguinte. O problema eh em que parte esta esse trecho que você checa a action e usa o metodo de realizar o logoff: if ($_GET['acao'] == "sair") { // Desautentica o usuário, destruindo a sessão e redirecionando o usuário // para a página de login $this->sair(); } Porque eu digo isso ? Porque todo o codigo dentro de uma classe nao estatica ou nao abstrata necessita de uma instancia da mesma para que o codigo dentro dela seja acessado. Logo, esse "if" nunca seria atingido soh pelo fato de voce redirecionar o usuario para a pagina que contem a classe. Voce precisa que uma instancia da classe faca o "parser" da sua requisicao get e, se encontrada a action apropriada, chame a operacao de realizar logoff. Precisamos saber onde esta este trecho de codigo especificamente. Eu sugeriria algo como o seguinte codigo: formLogin.php $formLogin = new FormLogin($_GET); class FormLogin { public function __construct($request) { if ($request['acao'] === 'sair') { $this->sair(); } } } Claro que essa eh uma solucao bem simples e voltada ao seu problema especifico, decorrente do codigo ja criado. O mais correto seria pesquisar sobre MVC cara, para separar corretamente a camada de apresentacao da camada de controle da aplicacao (requests e responses). Compartilhar este post Link para o post Compartilhar em outros sites
GraCasBa 0 Denunciar post Postado Janeiro 18, 2012 Veja que a linha que remove o cookie está comentada if (isset($_COOKIE[session_name()])) { //setcookie(session_name(), '', time()-42000, '/'); <<<<< unset($_COOKIE[session_name()]); } Oi Evandro descomentei não adiantou, o problema continua Obrigada por ta me ajudando Entao cara, eh o seguinte. O problema eh em que parte esta esse trecho que você checa a action e usa o metodo de realizar o logoff: if ($_GET['acao'] == "sair") { // Desautentica o usuário, destruindo a sessão e redirecionando o usuário // para a página de login $this->sair(); } Porque eu digo isso ? Porque todo o codigo dentro de uma classe nao estatica ou nao abstrata necessita de uma instancia da mesma para que o codigo dentro dela seja acessado. Logo, esse "if" nunca seria atingido soh pelo fato de voce redirecionar o usuario para a pagina que contem a classe. Voce precisa que uma instancia da classe faca o "parser" da sua requisicao get e, se encontrada a action apropriada, chame a operacao de realizar logoff. Precisamos saber onde esta este trecho de codigo especificamente. Eu sugeriria algo como o seguinte codigo: formLogin.php $formLogin = new FormLogin($_GET); class FormLogin { public function __construct($request) { if ($request['acao'] === 'sair') { $this->sair(); } } } Claro que essa eh uma solucao bem simples e voltada ao seu problema especifico, decorrente do codigo ja criado. O mais correto seria pesquisar sobre MVC cara, para separar corretamente a camada de apresentacao da camada de controle da aplicacao (requests e responses). Oi ArantesProg vou ler direitinho o que você me passaou e logo darei a resposta Obrigada por ta me ajudando Compartilhar este post Link para o post Compartilhar em outros sites
GraCasBa 0 Denunciar post Postado Janeiro 26, 2012 Oi Evandro descomentei não adiantou, o problema continua Obrigada por ta me ajudando Oi ArantesProg vou ler direitinho o que você me passaou e logo darei a resposta Obrigada por ta me ajudando Oi ArantesProg fiz como você me falo ainda não deu certo, ele esta lendo essa aprte do codigo pq quando aperto o botão sair ele sai mostra a mensagem tudo direitinho, mas quando digito na url ele vai para a pagina digitada sem pedir o login, então isso quer dizer q a sessao não esta sendo destruida ne?! Não sei mais oq fazer. Obrigada por esta me ajudando Compartilhar este post Link para o post Compartilhar em outros sites
GraCasBa 0 Denunciar post Postado Janeiro 30, 2012 Oiii pessoal que me ajudaram, consegui resolve o problema não estava verificando se a sessao estava aberta, ou seja, não estava verificando se estava logado, agora antes de entrar na classe crudusuario, é verificado se o campo login foi escrito algo se tiver vazio quer dizer que a pessoal não fez o login:classe crudusuario(um pedaço do codigo) olhe bem o if ......... if ((!isset($_SESSION['login']))) {//essa checagem é fundamental sem ela não verifica se a pessoa logo ou não //redireciona para a tela de login, pois as variáveis de sessão não estão preenchidas echo "<script language='JavaScript'>\n"; echo "<!--\n"; echo " self.document.location.href='formlogin.php'\n"; echo "//-->\n"; echo "</script>\n"; exit; } else { echo "<h4>Olá,<b>" . $_SESSION['login'] . "</b>!</h4>"; echo "| <a href='?acao=inserir'>Inserir Usuario</a>"; echo "| <a href=\"formlogin.php?acao=sair\">Sair</a>|</li><br></br><br></br>"; .......... esse if tbm deve ser feito na classe formlogin, antes de direcional para o crudusuario classe formlogin ..... if($resultado && $validar){ $_SESSION['login'] = $this->usuario; if ((!isset($_SESSION['login']))) {//esse if aqui tem q ter //redireciona para a tela de login, pois as variáveis de sessão não estão preenchidas //header("Location: http://".$_SERVER['HTTP_HOST'].dirname($SERVER['PHP_SELF'])."/inicial.php"); echo "<script language='JavaScript'>\n"; echo "<!--\n"; echo " self.document.location.href='formlogin.php'\n"; echo "//-->\n"; echo "</script>\n"; exit; } else echo "<meta HTTP-EQUIV='Refresh' CONTENT='0;URL=crudusuario.php'>"; $sucesso = true; }elseif($resultado && !$validar){ $_SESSION['erro'] = "Usuario não permitido ao acesso!"; } else { $sucesso = false; $_SESSION['erro'] = " Falha na autenticacao! Usuario não cadastrado!"; } // if ($sucesso){ // $_SESSION['erro'] = ' '; // } } catch (Exception $e) { $this->adicionarMsgValidacao($e->getMessage()); return $sucesso; } } Obrigada a todos que tentaram me ajuda :grin: Entao cara, eh o seguinte. O problema eh em que parte esta esse trecho que você checa a action e usa o metodo de realizar o logoff: if ($_GET['acao'] == "sair") { // Desautentica o usuário, destruindo a sessão e redirecionando o usuário // para a página de login $this->sair(); } Porque eu digo isso ? Porque todo o codigo dentro de uma classe nao estatica ou nao abstrata necessita de uma instancia da mesma para que o codigo dentro dela seja acessado. Logo, esse "if" nunca seria atingido soh pelo fato de voce redirecionar o usuario para a pagina que contem a classe. Voce precisa que uma instancia da classe faca o "parser" da sua requisicao get e, se encontrada a action apropriada, chame a operacao de realizar logoff. Precisamos saber onde esta este trecho de codigo especificamente. Eu sugeriria algo como o seguinte codigo: formLogin.php $formLogin = new FormLogin($_GET); class FormLogin { public function __construct($request) { if ($request['acao'] === 'sair') { $this->sair(); } } } Claro que essa eh uma solucao bem simples e voltada ao seu problema especifico, decorrente do codigo ja criado. O mais correto seria pesquisar sobre MVC cara, para separar corretamente a camada de apresentacao da camada de controle da aplicacao (requests e responses). Oi ArantesProg da uma olhada no post a cima eu consegui resolver. Era uma coisa boba, mas de fundamental importância. Obrigada Compartilhar este post Link para o post Compartilhar em outros sites