2010-09-05 3 views
2

У меня возникли проблемы с перезагрузкой сессий на PHP. Вот проблема:PHP session_id() не принимает существующий идентификатор сеанса

я могу получить идентификатор сессии с session_id(), скопировать его и добавить в самом верху моего сценария:

session_id('the_session_id'); 
session_start(); 

И когда я открываю новый браузер, сеанс от другого браузер не переносится. Какие настройки можно проверить?

+0

«когда я открываю новый браузер» - вы имеете в виду, если у вас есть FF, а затем открыть IE? –

+0

Вы нашли решение этой проблемы, потому что мне нужно то же самое с моей сессией? –

ответ

0

Причина:

Если закрыть окно браузера и открыть его снова, то в этот момент второй сеанс начался с другим ID, если используется веб-приложение имеет некоторые сессии на основе системы аутентификации пользователем должен снова войти в систему. В то же время пользователю необходимо дважды выйти из системы!

Решение:

Эта функция будет использовать реальные кук для идентификатора сеанса и обновляет время истечения с каждым выполнением сценария. Истечение срока действия равно директиве PHP «gc_maxlifetime» (по умолчанию) или каждому пользовательскому значению. Итак, поместите эту функцию в ваш PHP-файл. Нам это нужно.

<?php 

// $expire = the time in seconds until a session have to expire 
function start_session($expire = 0) 
{ 
    if ($expire == 0) 
     $expire = ini_get("session.gc_maxlifetime"); 
    else 
     ini_set("session.gc_maxlifetime", $expire); 

    if (empty($_COOKIE['PHPSESSID'])) 
    { 
     session_set_cookie_params($expire); 
     session_start(); 
    } 
    else 
    { 
     session_start(); 
     setcookie("PHPSESSID", session_id(), time() + $expire); 
    } 
} 

?> 

Теперь в верхней части страницы, где вы выдавший session_id('the_session_id'); и session_start();, удалить эти строки и начать сеанс связи с этим ниже кодом:

Чтобы начать сеанс с временем истечения срока действия, задаваемым PHP конфигурации

start_session(); 

Чтобы начать сеанс, который истекает через 1 час:

start_session(3600); 
+0

Спасибо. Позвольте мне быть более конкретным о том, что я делаю, потому что я думаю, что это имеет значение. Я использую Flash-загрузчик, и когда Flash-плагин выполняет сценарий загрузки PHP, сеанс прерывается, и я получаю 302. Поэтому я передаю PHPSESSID в качестве параметра post с запросом Flash, и на каждой странице у меня есть : if (isset ($ _ POST ['PHPSESSID'])) { session_id ($ _ POST ['PHPSESSID']); session_start(); } Но когда я выдаю $ _SESSION, он всегда пуст, если в этом блоке назначен идентификатор сеанса. Кажется, что он работает на большинстве серверов. Этот метод заблокирован любыми настройками php.ini? –

Смежные вопросы