Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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

×

Informação importante

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