[PHP7] Problem (?) med SessionHandlerInterface och $_SESSION
Hej,
Jag har implementerat SessionHandlerInterface likt följande:
<?php
class Session implements SessionHandlerInterface
{
protected $pdo;
public function __construct()
{
$dsn = 'mysql:host=' . 'localhost' . ';dbname=' . 'bytewizards.se';
$options = array(
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);
try {
$this->pdo = new PDO($dsn, '********', '********', $options);
}
catch(PDOException $exception) {
echo $exception->getMessage();
}
}
public function open($save_path, $session_name)
{
if($this->pdo) {
return true;
} else {
return false;
}
}
public function close()
{
$this->pdo = null;
return true;
}
public function read($session_id)
{
$statement = $this->pdo->prepare('SELECT data FROM sessions WHERE id = :session_id');
$statement->bindParam(':session_id', $session_id);
$statement->execute();
return $statement->fetchColumn();
}
public function write($session_id, $session_data)
{
$session_timestamp = time();
$statement = $this->pdo->prepare('REPLACE INTO sessions VALUES(:session_id, :session_timestamp, :session_data)');
$statement->bindParam(':session_id', $session_id);
$statement->bindParam(':session_timestamp', $session_timestamp);
$statement->bindParam(':session_data', $session_data);
return $statement->execute();
}
public function destroy($session_id)
{
$statement = $this->pdo->prepare('DELETE * FROM sessions WHERE id = :session_id');
$statement->bindParam(':session_id', $session_id);
return $statement->execute();
}
public function gc($maxlifetime)
{
$session_timestamp_timeout = time() - $maxlifetime;
$statement = $this->pdo->prepare('DELETE * FROM sessions WHERE timestamp < :session_timestamp_timeout)');
$statement->bindParam(':session_timestamp', $session_timestamp_timeout);
return $statement->execute();
}
}
och använder den likt följande:
[file1.php]
<?php
$session = new Session();
session_set_save_handler($session, true);
session_start();
$_SESSION["SESSION_DATA"] = 663154;
[file2.php]
<?php
$session = new Session();
session_set_save_handler($session, true);
session_start();
echo $_SESSION["SESSION_DATA"]; // 663154
och allting som jag har implementerat (open, read, write, gc) fungerar, men sessionen raderas inte på servern när jag stänger webläsaren. Anropar jag 'session_destroy()' manuellt så raderas sessionerna korrekt i databasen. Har jag missuppfattat hur $_SESSION fungerar eller har jag missat något?
Tack på förhand
{|XSX|PS3|PS4|}