$value){ unset($_SESSION[$key]); } session_decode($session_string); $restored_session = $_SESSION; foreach ($_SESSION as $key => $value){ unset($_SESSION[$key]); } session_decode($current_session); return $restored_session; } function open($save_path, $session_name) { global $sess_save_path; $sess_save_path = $save_path; return true; } function close() { return true; } function read($id) { global $sess_save_path; $sess_file = "$sess_save_path/sess_$id"; return (string) @file_get_contents($sess_file); } function write($id, $sess_data) { global $sess_save_path; $sess_file = "$sess_save_path/sess_$id"; if ($fp = @fopen($sess_file, "w")) { $return = @fwrite($fp, $sess_data); fclose($fp); return $return; } else { return false; } } function destroy($id) { global $hook; $hook(special_session_decode(read($id))); global $sess_save_path; $sess_file = "$sess_save_path/sess_$id"; return @unlink($sess_file); } function gc($maxlifetime) { global $sess_save_path; foreach (glob("$sess_save_path/sess_*") as $filename) { global $hook; $hook(special_session_decode(@file_get_contents($filename))); if (filemtime($filename) + $maxlifetime < time()) { @unlink($filename); } } return true; } function set_session_destroy_hook($callback) { global $hook; $hook = $callback; session_set_save_handler('open', 'close', 'read', 'write', 'destroy', 'gc'); } ?>