Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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?
>
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?@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>'; 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
Tenta assim