Почему мои сессии случайно не сохраняются? - PullRequest
3 голосов
/ 04 мая 2011

Мы исправили проблему, связанную с тем, что браузер не мог войти в поддомены, добавив следующую строку кода.

ini_set('session.cookie_domain', '.'.get_domain('http://'.$_SERVER['SERVER_NAME']));

Функция get_domain получает домен сайта, чтобы "sub.sub.domain.com "вернет" domain.com ".Мы добавляем "."так что наши сеансы хороши во всех поддоменах.

Это устранило проблему невозможности входа в систему, но проблема сейчас в том, что с тех пор, как мы добавили эту строку кода, мы случайно не сможем войтипотому что сеансы не созданы и просто равны NULL.

Я говорю случайно, потому что не могу понять, что вызвало это.Однажды пользователь может войти, он пытается войти на следующий день, и это не работает.Очистка файлов cookie обычно решает проблему.Есть идеи, что я могу делать не так?Я пробовал гуглить, но не нашел ничего полезного, наши пользователи расстроены, и у меня заканчиваются идеи.Любая помощь очень ценится.

Ответы [ 3 ]

1 голос
/ 04 мая 2011

Просто чтобы исключить это, попробуйте задать домен с постоянной строкой, а не выводить его с get_domain() примерно так:

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

Внимательно просмотрите в своем браузере файлы cookie, установленные как .foo.com, и все старые, которые могут быть установлены (или устанавливаются) в sub.foo.com

Я видел некоторые проблемы, подобные той, которую вы описали, из-за того, что некоторые куки не видны на разных серверах. Проблема заключается в том, что sub.foo.com может уже иметь запись cookie, которую вы не удалили, и только она сможет ее увидеть. Новый файл cookie установлен с www.foo.com на .foo.com, поскольку www.foo.com не может увидеть файл cookie sub.foo.com.

Надеюсь, это имело смысл ...

1 голос
/ 04 мая 2011

Очистка файлов cookie обычно решает проблему.

Похоже, у меня проблема с кэшированием, но это только предположение.

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

Лучшее предложение, которое я могу вам дать, - внедрить тест cookie в форме входа.Прежде чем пользователь действительно введет свои учетные данные, вы устанавливаете тестовый cookie и перенаправляете на ту же страницу с дополнительным test get-параметром.Если страница запрашивается с помощью этого дополнительного параметра test, проверяется, был ли успешно установлен тестовый файл cookie.

Разрешить вход в систему, только если тест пройден.В противном случае выдайте сообщение об ошибке и сообщите пользователю о технической проблеме.

Это может помочь вам определить, когда проблема действительно возникает.Кроме того, вы даже можете добавить дополнительную информацию со стороны сервера в случае ошибки, которая может помочь вам отладить проблему.

0 голосов
/ 16 июня 2011

Оказывается, я забыл изменить эту настройку в одном из заголовков, который выбрасывал все из рук вон.

(извините за ответ на свой вопрос, все проголосовали за помощь)

...