7-zip Geschrieben 4. Juli 2002 Teilen Geschrieben 4. Juli 2002 Hallo, ich wollte einfach mal fragen ob sich jemand schonmal mit der session_set_save_handler() funtion auseinander gesetzt hat ?! Also die Benutzerdefinierte Session-Speicherfunktion von PHP. Bei mir funktioniert insoweit alles, er speichert die Session + Daten in einer DB und liest sie auch wieder aus. Der session_destroy() mit der Datenbank funktioniert auch, nur die function sec_gc() funktioniert einfach nicht. Er löscht den Garbage nach einer bestimmten Zeit einfach nicht. Dieses Problem hatte ich auch schon mit dem definierten session.gc_maxlifetime Wert in der php.ini, wenn ich den Intervall auf 10sec gesetzt habe wurde die session auch nie gelöscht, also ein allgemeines Problem von PHP ?! Leider gibt einem die PHP-Hilfe wenig hilfreiches über dieses Thema ... Ich habe mein Script mal gepostet ... <? $current_session_name = false; function connectDB(){ $db = "db-rz-09-idl10"; mysql_connect("db-rz-09", "-", "-"); mysql_select_db($db); } function disconnectDB(){ mysql_close(); } function sec_open($save_path, $session_name) { GLOBAL $current_session_name; $current_session_name = $session_name; } function sec_close() { return true; } function sec_read($key) { GLOBAL $current_session_name; connectDB(); $r = "SELECT value FROM session WHERE idkey = '$key' AND name = '$current_session_name'"; $result = mysql_query($r); if (mysql_num_rows($result) == 1) { $session_data = mysql_result($result,0,'value'); return $session_data; } else { return ""; } disconnectDB(); } function sec_write($key, $value) { GLOBAL $current_session_name; connectDB(); $r = mysql_query("SELECT idkey FROM session WHERE idkey = '$key' AND name = '$current_session_name'"); if (mysql_num_rows($r)==0) { mysql_query("INSERT INTO session (name,idkey,value,timestamp) VALUES ('$current_session_name','$key','$value',".time().")"); } else { mysql_query("UPDATE session SET value = '$value', timestamp = ".time()." WHERE name = '$current_session_name' AND idkey = '$key'"); } return true; disconnectDB(); } function sec_destroy($key) { GLOBAL $current_session_name; connectDB(); if (!mysql_query("DELETE FROM session WHERE idkey = '$key' AND name = '$current_session_name'")) { return false; } else { return true; } disconnectDB(); } function sec_gc($maxlifetime) { GLOBAL $current_session_name; connectDB(); $r = mysql_query("SELECT idkey FROM session WHERE name = '".$current_session_name."' AND timestamp < ".(time()-$maxlifetime)); if (!$r) { return false; } for ($i=0; $i < mysql_num_rows($r); $i++) { $row = mysql_fetch_array($r,$i); sec_destroy($row["key"]); } return true; disconnectDB(); } session_set_save_handler ("sec_open", "sec_close", "sec_read", "sec_write", "sec_destroy", "sec_gc"); session_start(); ?> Wäre genial wenn jemand wüsste woran es liegt und wie man es beheben kann, also das mit der sec_gc() ... MfG 7-Zip Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.