Если пользователь посещает sub1.example.com или sub2.example.com и не вошел в систему, он перенаправляется на auth.example.com и может войти в систему.
sub1.example.com и sub2.example.com - два разных приложения, но используют одни и те же учетные данные.
Я попытался установить в своем php.ini следующее:
session.cookie_domain = ".example.com"
но похоже, что он не передает информацию из одного домена в другой.
Идентификаторы сеанса точно такие же, но когда я выгружаю переменную $_SESSION, она не показывает оба ключа, а только тот ключ, который я установил для каждого домена.
Вы также должны включить его в своем коде, см. http://us2.php.net/manual/en/function.session-set-cookie-params.php Residuum 30.06.2009
У меня почти такая же настройка (я установил домен cookie сеанса с помощью вызова session_set_cookie_params), и он отлично работает. Milen A. Radev 30.06.2009
Вот хорошая функция, которая работает stackoverflow.com / questions / 2835486 / boksiora 14.07.2013
Я не знаю, существует ли проблема, но я просто столкнулся с той же проблемой и решил ее, установив имя сеанса перед вызовом session_set_cookie_params():
Я ничего не менял в своем php.ini, но теперь все работает нормально.
Ответ 2 · рейтинг 24 · drewm
Одна вещь, которая может загадочным образом предотвратить чтение данных сеанса на поддомене, несмотря на то, что файлы cookie правильно установлены на .example.com, - это патч PHP Suhosin. Вы можете настроить все правильно, как показано в примерах в вопросе, и это может просто не работать.
Отключите следующие настройки сеанса Suhosin, и вы снова в деле:
suhosin.session.cryptua = Off
suhosin.session.cryptdocroot = Off
Ответ 3 · рейтинг 5 · George Claghorn
Попробуйте использовать:
session.cookie_domain = "example.com"
Вместо:
session.cookie_domain = ".example.com"
Обратите внимание на пропущенный период в начале.
Однако будьте осторожны при использовании этого параметра, поскольку он поддерживается не всеми браузерами.
Ответ 4 · рейтинг 4 · Valentin Florea
Была эта точная проблема - я хотел, чтобы значения сеанса, созданные в x.example.local, были доступны в example.local и наоборот.
Во всех найденных мною решениях говорится об изменении домена сеанса с помощью php_value session.cookie_domain .example.local в .htaccess (или через php.ini или через ini_set).
Уловка заключалась в том, что я устанавливал session.cookie_domain для всех поддоменов (пока нормально), но также и для основного домена. Очевидно, что установка session.cookie_domain в основном домене - это недопустимо.
В основном, как это сработало для меня:
установите session.cookie_domain для ВСЕХ ПОДдоменов.
не устанавливайте его для основного ДОМЕНА
О да, пожалуйста, убедитесь, что у домена есть TLD (в моем случае .local). Протокол Http не позволяет хранить файлы cookie / сеансы в домене без .tld (то есть localhost не будет работать, но stuff.localhost будет).
РЕДАКТИРОВАТЬ. Также убедитесь, что вы всегда очищаете файлы cookie своего браузера во время тестирования / отладки сеансов на поддоменах. Если вы этого не сделаете, ваш браузер всегда будет отправлять старый файл cookie сеанса, для которого, вероятно, еще не установлен правильный cookie_domain. Сервер восстановит старую сессию, поэтому вы получите ложноотрицательные результаты. (во многих сообщениях упоминается использование session_name ('stuff') для того же эффекта)
Имя сеанса не может состоять только из цифр, должна присутствовать хотя бы одна буква. В противном случае каждый раз создается новый идентификатор сеанса.
Используйте следующий код, чтобы начать использовать сеанс
Путь для session.save_path в вашем случае может быть другим, но он должен быть одинаковым для каждого домена / субдомена. По умолчанию это не всегда так.
Я понимаю, что вам не нужно что-то вроде OpenID, как предлагает Джоэл, но вы хотите иметь доступ к данным сеанса в нескольких доменах.
Единственная возможность, которую я могу рассматривать как решение этой проблемы, - это сохранить данные сеанса в базе данных и вытащить их из этой базы данных.
Ответ 11 · Willian Santana
У меня была аналогичная проблема, однако это решение было для меня хорошим, возможно, поможет другим в будущем
отредактируйте php.ini
session.cookie_domain = ".example.com"
магия здесь
suhosin.session.cryptdocroot = Off
suhosin.cookie.cryptdocroot = Off
Я не могу говорить о других версиях PHP, но в 5.6.6 простая установка значения session.cookie_domain в файле php.ini позволила всем моим поддоменам на iPage использовать один и тот же набор переменных сеанса.
Обязательно удалите из браузера все существующие файлы cookie, относящиеся к вашему домену, для проверки.
session.cookie_domain = '.yourdomainname.example'
О, не знаю, имеет ли это значение, но я также использую автозапуск сеанса.