2010-05-14 2 views
1

Я прочитал много форумов (включая эту) о передаче переменных сеанса между субдоменами, и я не могу заставить это работать. Может ли кто-нибудь объяснить, что мне не хватает?Сессия PHP, совместно используемая с субдоменом

Шаг 1 В файле php.ini: session.cookie_domain = ".mydomain.com" проверена с phpinfo(), который я использую правильный файл php.ini

Шаг 2 На странице в www.mydomain.com установите переменную сеанса $ _SESSION ['a'], убедитесь, что она отображается, вызывая ее на следующей странице (она делает). Звенеть ссылка sub.mydomain.com

Шаг 3 Страницу в sub.mydomain.com проверяет, переменная сеанса устанавливается с помощью:

$ а = $ _SESSION [ 'а']; if (! Isset ($ _ SESSION ['a'])) { echo "Ошибка: переменная сеанса недоступна"; }

К сожалению, я получаю сообщение об ошибке. Что мне не хватает? Заранее спасибо за помощь.

+0

Вы проверить, что phpinfo() при запуске на субдомен также показывает правильную настройку cookie_domain? – webbiedave

ответ

2

отладка.
- это то, чего вам не хватает.

Прежде всего, вам нужно посмотреть заголовки HTTP, чтобы узнать, что происходит и какие файлы cookie устанавливаются. Вы можете использовать аддон LiveHTTPHeaders Firefox или что-то еще. С такой информацией вы можете найти проблему. Без него никто не может ответить на вопрос на тур «мои сеансы не работают»

Это может подтвердить ваше утверждение о правильной настройке домена в настройках сеанса. Или опровергнуть это.
Он может выявить некоторые другие неправильные настройки.
Он может показать вам Cookie отправляется обратно в браузер - поэтому вы можете быть уверены, что на стороне сервера проблема

Чтобы увидеть фактический результат вашего кода (вместо того, чтобы гадать на основе косвенных последствий) всегда помогает ,

+0

Спасибо, я загрузил LiveHTTPHeaders, и я вижу эту запись в POST ... Cookie: PHPSESSID 870bfb ... и т. Д. Итак, он передает sessionid на следующую страницу, правильно? Я использовал другой метод ниже, и он работает. Я не уверен, что искать в заголовке для моего другого решения. – Ian

3

Так, я пошел в другом направлении, и использовали эту запись, которая работала ...

session_set_cookie_params (0, '/', '.mydomain.com'); session_start();

3

Вы должны пройти идентификатор сеанса, как печенье и установить один и тот же идентификатор сеанса на новом домене

Например, вы можете использовать этот код

ini_set('session.cookie_domain', '.example.com'); 
$currentCookieParams = session_get_cookie_params(); 

$rootDomain = '.example.com'; 
session_set_cookie_params( 
    $currentCookieParams["lifetime"], 
    $currentCookieParams["path"], 
    $rootDomain, 
    $currentCookieParams["secure"], 
    $currentCookieParams["httponly"] 
); 

if(!empty($_SESSION)){ 
    $cookieName = session_id(); 
    setcookie('PHPSESSID', $cookieName, time() + 3600, '/', $rootDomain); 

} 

if(isset($_COOKIE['PHPSESSID'])){ 
    session_name($_COOKIE['PHPSESSID']); 
} 
Смежные вопросы