Сессия и куки

Все, связанное с web-строительством.

Модератор: [mweb team]

Сессия и куки

Сообщение ViperMobster Ср ноя 03, 2010 3:20

В общем проблема такая...
Реализую свой обработчик сессий, выглядит вот так:
Код: Выделить всё
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 секунд начинается новая сессия. Мне нужно сделать так, чтоб и при закрытии браузера начиналась новая сессия...
Аватара пользователя
ViperMobster
Прохожий
 
Сообщения: 36
Зарегистрирован: Вт авг 14, 2007 9:53

Re: Сессия и куки

Сообщение Muerto Ср ноя 03, 2010 14:19

Проверить не могу, но есть думка, что при событии на боди Unload можно повесить жабаскрипт препарирующий Expires в куке сессии, правда есть одно НО - опера не поддерживает это событие, а ФФ и ИЕ порождает его и при обновлении страницы (Ф5).
Nadie hablara de nosotras cuando hayamos muerto.
www.muerto.ru
Аватара пользователя
Muerto
Растаман
 
Сообщения: 3594
Зарегистрирован: Пн окт 11, 2004 20:09
Откуда: Москва


Вернуться в Web-мастеринг

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

cron