Alberto Nascimento 0 Denunciar post Postado Maio 18, 2020 Quando faço LOGIN uma sessão é criada através do comando session_start(); Mas só que estou tendo problemas ao "destruir a sessão" ao sair. Mesmo utilizando session_destroy(); Percebo que não esta sendo destruída, pois experimento abrir em uma nova guia ( mesmo ao ser redirecionado ao destruir sessão ) percebo que a sessão continua ativa. Como então faço para que consiga destruir por definitivo a sessão? Compartilhar este post Link para o post Compartilhar em outros sites
Sapinn 0 Denunciar post Postado Maio 18, 2020 Tenta assim <?php session_start(); session_unset(); session_destroy(); header("location:../index.html"); ?> Compartilhar este post Link para o post Compartilhar em outros sites
Alberto Nascimento 0 Denunciar post Postado Maio 18, 2020 5 minutos atrás, Sapinn disse: Tenta assim <?php session_start(); session_unset(); session_destroy(); header("location:../index.html"); ?> Infelizmente não surtiu efeito algum. Só consigo realmente destruir a sessão de imediato se eu fechar o navegador ... Porém, como fazer isso com o usuário sendo que se utiliza de abas? Compartilhar este post Link para o post Compartilhar em outros sites
Omar~ 87 Denunciar post Postado Maio 18, 2020 @Alberto Nascimento uma session nada mais que é um ARRAY global portanto você deletar como deleta qualquer outro array no php. unset($_SESSION); // Simples assim Porque se isso aqui não surtiu efeito acredito que seu problema é o buffer do cabeçalho. 2 horas atrás, Sapinn disse: <?php session_start(); session_unset(); session_destroy(); header("location:../index.html"); ?> Experimente essa minha classe para gerenciar sessões: Session.php Spoiler <?php /** * ******************************************** * * @class Session * * @copyright (c) Spell master * * @version 2.0 * * @see Classe para gerenciamento de cessões * ******************************************** * @usage * * Iniciar cessão * $session = Session::startSession(); * Inicia as cessões, caso já iniciadas * retorna as mesmas não iniciando novamente. * * * Definir uma cessão * $session->Word = "Olá"; * * * Verificar as cessões estão ativas * Session::getSession(); * * * Remover todas cessões * Session::destroy(); * * * Remover a cessão expecífica * unset($session->Word); * * ******************************************** * * Para evitar roubo de cessões defina * um nome prefixo para suas cessões exemplo: * $session = Session::startSession('nome'); * $session->Word = 'Olá'; * var_dump($_SESSION); * - Resultado: * array(1) { ["Word_nome"]=> string(3) "Olá" } * ******************************************** */ class Session { private static $status; private static $globalName; private static $session; /** * **************************************** * Gerencia entradas para cessões. * **************************************** * @Param {STR} $prefix * Se definido o prefixo todas as cessões * terão esse prefixo alocado. * **************************************** */ public static function startSession($prefix = null) { self::$globalName = (empty($prefix) ? null : '_' . $prefix); if (!self::$status) { self::$session = new self; } self::$status = session_start(); return (self::$session); } /** * **************************************** * Verifica se existem cessões iniciadas * **************************************** */ public static function getSession() { return (self::$status); } /** * **************************************** * Elimina todas cessões iniciadas * **************************************** */ public static function destroy() { self::$session = session_destroy(); unset($_SESSION); } /** * **************************************** * Métodos de auxilio a classe. * Automatiza eventos... * **************************************** */ public function __set($name, $value) { $_SESSION[$name . self::$globalName] = $value; } public function __get($name) { if (isset($_SESSION[$name . self::$globalName])) { return ($_SESSION[$name . self::$globalName]); } } public function __isset($name) { return (isset($_SESSION[$name . self::$globalName])); } public function __unset($name) { unset($_SESSION[$name . self::$globalName]); } } Muito simples de usar. Vou demostrar o exemplo com três arquivos Arquivo 1. Onde criamos a cessão Citar <?php require_once ('Session.php'); $session = Session::startSession(); $session->dizer = "Olá"; var_dump($_SESSION); // array(1) { ["dizer"]=> string(4) "Olá" } if (isset($session->dizer)) { echo '<p>Existe a $_SESSION[\'dizer\']</p>'; } Arquivo 2. Onde destruímos a cessão: <?php require_once ('Session.php'); $session = Session::startSession(); var_dump($_SESSION); // array(1) { ["dizer"]=> string(4) "Olá" } if (isset($session->dizer)) { echo '<p>Existe a $_SESSION[\'dizer\'] e vamos destruír</p>'; Session::destroy(); // <<<<< Destroi todas cessões iniciadas! } Arquivo 3. Onde verificamos quais sessões existem: <?php require_once ('Session.php'); $session = Session::startSession(); var_dump($_SESSION); if (isset($session->dizer)) { echo '<p>Existe a $_SESSION[\'dizer\']</p>'; } else { echo '<p>Não existe a $_SESSION[\'dizer\']</p>'; } Bom, se você acessar o (arquivo 1) pelo browser verá que a sessão é criada, então acessar o (arquivo 3) vemos que essa cessão que criamos no arquivo 1 existe. Porém se acessar o (arquivo 2) a sessão vai deixar de existir, então se irmos até o arquivo 3 vemos que não existe mais a cessão. No mais leia a documentação da classe pois exitem mais recursos disponíveis Compartilhar este post Link para o post Compartilhar em outros sites