Ir para conteúdo
Alberto Nascimento

Destruindo Sessão Por Definitivo

Recommended Posts

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
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

@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

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.