$ _SESSION сохраняется на сервере или в браузере? - PullRequest
0 голосов
/ 22 декабря 2010

Поскольку у меня есть два веб-сайта на одном сервере и в одном домене (разные папки), и у меня возникают проблемы при запросе $_SESSION['id'], в основном оба сайта используют одно и то же значение, и я не хочу этого.

Если я поменяю домен и укажу на одну и ту же папку на том же сервере, у меня будет та же проблема?

Ответы [ 4 ]

7 голосов
/ 22 декабря 2010

Данные сеанса хранятся на сервере.Файл cookie с идентификатором сеанса хранится на компьютере пользователя и связан с одним доменным именем .Браузер передает этот файл cookie на сервер, чтобы он знал, какие данные сеанса связать с пользователем.

Два веб-сайта, размещенные в одном домене, будут совместно использовать один и тот же сеанс, поскольку будет только один файл cookie, содержащийидентификатор сеанса.Если вы разместите сайты в разных доменах, у вас больше не возникнет проблема, поскольку на компьютере пользователя будут созданы два разных файла cookie (содержащих два разных идентификатора сеанса);по одному на каждое доменное имя.

5 голосов
/ 22 декабря 2010

Используйте session_set_cookie_params , чтобы изменить путь файла cookie сеанса (т. Е. Не использовать /, но / path1, / path2 и т. Д.), Даже если они используют один и тот же домен.

http://www.php.net/manual/en/function.session-set-cookie-params.php

0 голосов
/ 22 декабря 2010

http://php.net/manual/en/ref.session.php
И более конкретно
http://www.php.net/manual/en/function.session-save-path.php

Вы можете указать PHP, где вы сохраняете файлы сеанса, используя session-save-path.

0 голосов
/ 22 декабря 2010

Нет, не будешь. Данные сеанса хранятся на сервере, но хранятся отдельно для каждого домена на этом сервере.

Тем не менее, вы можете "пространство имен" своих данных сеанса двух приложений в переменной $ _SESSION. Например, «yourdomain.com/app1» будет хранить все свои данные примерно так: $_SESSION['app1']['whatever'] = 'something';, а «yourdomain.com/app2/ будет использовать $_SESSION['app2']['whatever'] = 'something else';.

Это решит проблему коллизий, но вам нужно убедиться, что нигде в вашем коде вы не пишете / читаете не то «пространство имен». Также «app1» сможет читать данные «app2», и наоборот.

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