Hallo Leute,
ich habe eine Klasse für meine Sessions.
Funktioniert eigentlich super. Allerdings wird die Session nach der vorgegebenen Zeit nicht aus der DB gelöscht.
Mit Ausnahme dann, wenn man den Browser komplett schließt und dann wieder öffnet. Dann wird die Session nach vorgegebener Zeit auch aus der DB gelöscht.
Eigentlich sollte es aber doch auch funktionieren, wenn man den Browser lediglich aktualisiert.
ALso ich stelle die Lebensdauer der Session z.b. auf 5 Minuten.
Wenn ich nun nach 7 Minuten den Browser wieder aktualisiere, dann sollte die Session doch gelöscht werden.
Vielleicht kann mal jemand über diese Klasse schauen und den Fehler bzw. die Ursache dafür finden.
Danke und Gruß
ich habe eine Klasse für meine Sessions.
Funktioniert eigentlich super. Allerdings wird die Session nach der vorgegebenen Zeit nicht aus der DB gelöscht.
Mit Ausnahme dann, wenn man den Browser komplett schließt und dann wieder öffnet. Dann wird die Session nach vorgegebener Zeit auch aus der DB gelöscht.
Eigentlich sollte es aber doch auch funktionieren, wenn man den Browser lediglich aktualisiert.
ALso ich stelle die Lebensdauer der Session z.b. auf 5 Minuten.
Wenn ich nun nach 7 Minuten den Browser wieder aktualisiere, dann sollte die Session doch gelöscht werden.
Vielleicht kann mal jemand über diese Klasse schauen und den Fehler bzw. die Ursache dafür finden.
Danke und Gruß
PHP:
Namespace _Core\Models;
use _Core\Controllers\DatabaseController as SQL;
class SessionHandler{
public function __construct(){
session_set_save_handler(array(&$this, '_open'), array(&$this, '_close'), array(&$this, '_read'), array(&$this, '_write'), array(&$this, '_destroy'), array(&$this, '_gc'));
session_start();
register_shutdown_function('session_write_close');
}
public function _open($save_path, $session_name){
return true;
}
public function _close(){
return true;
}
public function _read($id){
$query = SQL::Query("SELECT value FROM sessions WHERE id = '" . SQL::SecureInput($id) . "' LIMIT 1");
if(SQL::NumRows($query) > 0){
$erg = SQL::FetchArray($query);
return $erg['value'];
}
return '';
}
public function _write($id, $sess_data){
$check = SQL::Query("SELECT id FROM sessions WHERE id = '" . $id . "'");
if(SQL::FetchArray($check) > 0){
$query = SQL::Query("UPDATE sessions SET last_updated ='" . SQL::SecureInput(time()) . "', value = '" . SQL::SecureInput($sess_data) . "' WHERE id = '" . SQL::SecureInput($id) . "'");
}else{
$query = SQL::Query("INSERT INTO sessions (id, last_updated, start, value) VALUES ('" . SQL::SecureInput($id) . "', '" . SQL::SecureInput(time()) . "', '" . SQL::SecureInput(time()) . "', '" . SQL::SecureInput($sess_data) . "')");
}
return mysql_affected_rows();
}
public function _destroy($id){
$query = SQL::Query("DELETE FROM sessions WHERE id = '" . SQL::SecureInput($id) . "'");
$_SESSION = array();
return mysql_affected_rows();
}
public function _gc($maxlifetime) {
$maxlifetime = strtotime("-20 minutes");
$query = SQL::Query("DELETE FROM sessions WHERE last_updated < '" . SQL::SecureInput($maxlifetime) . "'");
return mysql_affected_rows();
}
public static function Register($session, $var) {
$_SESSION[$session] = $var;
}
public static function Output($session) {
return $_SESSION[$session];
}
public static function Check($variable){
return isset($_SESSION) && array_key_exists($variable, $_SESSION);
}
public static function Recreate(){
return session_regenerate_id();
}
public static function Destroy(){
return session_destroy();
}
}