Ir para conteúdo

POWERED BY:

Arquivado

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

diasgabrie

session_set_save_handler pegando SESSION outro usuário

Recommended Posts

Estou usando o session_set_save_handler para gravar a sessão no MySQL, porém um erro vem me atormentando.

Quando faço login no IE com um usuário, depois fecho o navegador sem dar logout e entro no Chrome, eu já inicio a sessão logado com o usuário do IE. Ou seja, ele está me logando automaticamente com a sessão de outro usuário.

Segue minha função:

<?php

GLOBAL $mysqli_link;

function _open($save_path, $session_name) {
return true;
}

function _close() {
return true;
}

function _read($id) {
GLOBAL $mysqli_link;

$id = hash('sha512', $id);

$stmt = $mysqli_link->prepare("SELECT data FROM session WHERE id = ? limit 1");
$stmt->bind_param('i', $id);
$stmt->execute();
$result = $stmt->get_result();
$num = $result->num_rows;

if ($num>0) {
$record = $result->fetch_assoc();
return $record['data'];
}
else{
return '';
}
}

function _write($id, $data) {
GLOBAL $mysqli_link;

//echo session_id();

$id = hash('sha512', $id);

$access = time();

if($data!=""){
$stmt = $mysqli_link->prepare("REPLACE INTO session VALUES (?,?,?)");
$stmt->bind_param('sss', $id, $access, $data);
$stmt->execute();
}

return true;
}

function _destroy($id) {
GLOBAL $mysqli_link;

$id = hash('sha512', $id);

$stmt = $mysqli_link->prepare("DELETE FROM session WHERE id = ?");
$stmt->bind_param('i', $id);
$stmt->execute();
}

function _clean($max) {
GLOBAL $mysqli_link;
$CurrentTime = time();

//$old = time() - $max;
//$stmt = $mysqli_link->prepare("DELETE FROM session WHERE access < ?");

$stmt = $mysqli_link->prepare("DELETE FROM session WHERE access + ? < ?");
$stmt->bind_param('ss', $max, $CurrentTime);
$stmt->execute();
}

session_set_save_handler('_open','_close','_read','_write','_destroy','_clean');
register_shutdown_function('session_write_close');



?>

na pagina index.php tenho isso:

session_start();

if(isset($_SESSION["user"])){
$user = $_SESSION["user"];
header("Location:welcome.php");
die();
}

a intenção aqui é verificar se a pessoa esta logada, se sim, envia para página welcome.php.

e no welcome tenho isso para verificar se o usuario esta realmente logado para continuar na página:

session_start();

if(empty($_SESSION["id"]) || empty($_SESSION["user"]))
{
header("Location:login.php");
die();
}

tabela sql das sessions:

 

CREATE TABLE IF NOT EXISTS `session` (
  `id` varchar(128) NOT NULL,
  `access` int(10) unsigned DEFAULT NULL,
  `data` text,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

qual será meu problema?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentei achar, mais não encontrei, em que momento você cria o cookie da sessão?

 

 

tipo

public function __construct($key, $name = 'NOME_SESSION', $cookie = [])
    {
        $this->key = $key;
        $this->name = $name;
        $this->cookie = $cookie;

        $this->cookie += [
            'lifetime' => 0,
            'path'     => ini_get('session.cookie_path'),
            'domain'   => ini_get('session.cookie_domain'),
            'secure'   => isset($_SERVER['HTTPS']),
            'httponly' => true
        ];

        
    }

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.