Реализую свой обработчик сессий, выглядит вот так:
- Код: Выделить всё
function open($save_path, $session_name) {
return true;
}
function close() {
return true;
}
function read($session_id) {
$return = "";
$id = mysql_real_escape_string($session_id);
$sql = "SELECT session_data FROM session WHERE session_id = '".mysql_real_escape_string($id)."'";
$result = mysql_query($sql);
$num_rows = mysql_num_rows($result);
if ($num_rows > 0) {
$return = mysql_result($result, 0);
}
mysql_free_result($result);
return (string) $return;
}
function write($session_id, $session_data) {
$current_time = time();
$id = mysql_real_escape_string($session_id);
$data = mysql_real_escape_string($session_data);
$user_id = 0;
if (isset($_SESSION["user_id"])) {
$user_id = $_SESSION["user_id"];
}
$sql = "REPLACE INTO session (session_id, session_time, session_data, user_id) VALUES ('".$id."', '".$current_time."', '".$data."', '".$user_id."')";
$result = mysql_query($sql);
return true;
}
function destroy($session_id) {
$id = mysql_real_escape_string($session_id);
$sql = "DELETE FROM session WHERE session_id = '".$id."'";
$result = mysql_query($sql);
return true;
}
function gc($maxlifetime) {
$current_time = time();
$session_time = $current_time - $maxlifetime;
$sql = "DELETE FROM session WHERE session_time < ".$session_time."";
$result = mysql_query($sql);
return true;
}
ini_set("session.gc_maxlifetime", $config["session_lifetime"]);
ini_set("session.gc_probability", 1);
ini_set("session.gc_divisor", 100);
session_set_save_handler("open", "close", "read", "write", "destroy", "gc");
$cookie_path = "/";
$cookie_timeout = $config["session_lifetime"];
session_set_cookie_params($cookie_timeout, $cookie_path);
session_start();
Соответсвенно $config["session_lifetime"] - это время жизни сессии, настраивается в конфигурационном файле... Равно 900 секунд.
Ввиду того, что я использую функцию session_set_cookie_params с лайфтаймом не равным нулю, то сессия не прекращает работать, когда я закрываю браузер. И сколько бы не прошло времени, когда я снова захожу, она восстанавливается, а не начинается новая с новым идентификатором. В плане времени жизни всё нормально, по истечении 900 секунд начинается новая сессия. Мне нужно сделать так, чтоб и при закрытии браузера начиналась новая сессия...