обмен сессией над поддоменами в PHP - PullRequest
0 голосов
/ 12 июня 2011

Я использую CI.Я хочу поделиться сессией над поддоменами И я использую базу данных для хранения сессий

Я пробовал это

ini_set('session.cookie_domain', substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100));

if(session_id ==''){session_start();}

Это означает, что xycom и zycom будут использовать общий сеанс, помогите мне, пожалуйста

Ответы [ 3 ]

5 голосов
/ 03 июля 2011

Установите новый session.name перед изменением других настроек сеанса и началом нового сеанса. Смотрите примечания ниже:

//Name your session for changes to be applied to.
session_name('my_session'); //Any arbitrary short name. Must have at least on letter char.

//Force a common cookie domain to apply to all subdomains.
ini_set('session.cookie_domain', '.domain.com'); //Change '.domain.com' accordingly.

//Start the Session if session_id() returns nothing.
if( empty( session_id() ) ) { session_start(); }

Это последовательно работает для меня. Документация php.net по этому вопросу минимальна, но, похоже, это единодушное мнение многих в сообществе.

5 голосов
/ 12 июня 2011

Учитывая тот факт, что вы уже знаете свое доменное имя, есть ли причина, по которой вы используете substr для его определения?Вы могли бы быть намного более читабельным, если бы вы просто использовали:

ini_set('session.cookie_domain', '.domain.tld');

Чтобы файлы cookie работали в нескольких поддоменах, домен cookie должен начинаться с точки (.), За которой следует общая часть всех дочерних доменов.домены (скорее всего domain.tld.)

Кроме того, вторая строка вашего сообщения, где вы проверяете, нужно ли начинать сеанс, неверна.Вы пропускаете набор скобок после session_id, потому что это функция, а не константа.Условный оператор (if) всегда будет терпеть неудачу, вызывая метод session_start () каждый раз.

if ( empty(session_id()) ) session_start();
1 голос
/ 15 сентября 2011

Я предполагаю, что это выше войдет в файл входа в систему, который обрабатывает вход в систему и начинает сеанс?

У меня есть код ниже в моем файле входа в систему.Да, я программист вырезания и вставки:)

Означает ли это, что он должен работать во всех поддоменах, поскольку он говорит, что это постоянные сеансы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...