Совместное использование переменных сессии между несколькими поддоменами - PullRequest
9 голосов
/ 06 февраля 2012

У меня есть сайт www.example.com.Это будет иметь несколько поддоменов, которые работают с одним приложением или программой.Например, login.example.com позволит пользователю войти на сайт, в то время как system.example.com позволит пользователю получить доступ к информационной системе, а forums.example.com позволит пользователю получить доступ к форумам.

Возможно, нам понадобится передать информацию между поддоменами, такую ​​как идентификатор пользователя, предпочтения пользователя и т. Д. Как мы можем передавать информацию между поддоменами с помощью переменных SESSION?

ПРАВКАМне нравится эта идея:

Как первое, что в вашем сценарии:

ini_set('session.cookie_domain', '.example.com' ); 

Ответы [ 7 ]

13 голосов
/ 06 февраля 2012

Идентификаторы сессии PHP сохраняются в файлах cookie. Чтобы файл cookie был доступен во всех поддоменах, необходимо назначить его корневому домену . Затем все субдомены получат идентификатор сеанса из cookie, и PHP сможет найти сеанс, используя переданный идентификатор сеанса.

Как оказалось, вам просто нужно установить session.cookie_domain в корневой домен в php.ini файле

session.cookie_domain = ".example.com"

Также проверьте руководство для различных подходов, используемых для установки записи ini.

9 голосов
/ 11 февраля 2012

Я нашел решение своей проблемы:

session_name("2620368ghwahw90w");
session_set_cookie_params(0, '/', '.mydomain.com');
session_start();

Кажется, это работает без проблем. Это хороший метод с низким риском безопасности?

9 голосов
/ 06 февраля 2012

1) субдомены должны использовать один и тот же путь для сохранения файлов сеанса

2) изменить ваш

php.ini session.cookie_domain = ".example.com"

или .htaccess php_value session.cookie_domain .example.com

или внутри скрипта ini_set('session.cookie_domain', '.example.com' );

3 голосов
/ 05 марта 2013

Прежде чем создавать сеанс в php-файле, добавьте эту строку в первую строку:

<?php
//session cross to sub domain
ini_set('session.cookie_domain', substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100));
2 голосов
/ 06 февраля 2012

вы можете использовать куки.проверьте параметр path в setcookie () , который делает этот файл cookie доступным для всего домена.Недостатками этого являются люди, которые отключают куки (приватные режимы просмотра)

. Другим способом будет передача идентификатора сессии вокруг с использованием ссылок или скрытых <input> полей (для форм).

, поскольку отдельные веб-сайты не разделяют сеансы (насколько я знаю, так как поддомены технически "отличаются" друг от друга), не используйте сеансы для хранения на стороне сервера.вместо этого используйте базу данных для обработки ваших сессий.таким образом, несколько сайтов могут совместно использовать одну и ту же таблицу отслеживания сеансов.

0 голосов
/ 18 октября 2017

Я уже давно обхожусь с этим, и для меня сработало размещение кода ниже:

session_name("some_session_name"); session_set_cookie_params(0, '/', '.some_domain.com'); session_start();

во всех поддоменах, которые будут использоватьпеременные сеанса.Я установил это в начале моего файла индекса php, и это работает.Надеюсь, это прояснит.

0 голосов
/ 06 февраля 2012

Чтобы поделиться сессионным cookie-файлом среди поддоменов, необходимо установить для домена cookie-файла значение .example.org (обратите внимание на точку).

http://www.php.net/manual/en/session.configuration.php#ini.session.cookie-domain

...