Предотвращение конфликтов сеансов в PHP - PullRequest
2 голосов
/ 22 июня 2009

Недавно я наткнулся на интересную ошибку, из-за которой в нашей локальной системе тикетов будут появляться записи от пользователей, которых нет в приложении. После некоторых раздумий я понял, что и это, и другое приложение PHP, работающие на одном сервере, используют $ _SESSION ['user'] для аутентификации. Когда кто-то использовал одну систему, а затем открыл другую, он автоматически входил в систему как пользователь из первого приложения.

После обязательной лицевой стороны я изменил имя переменной сеанса в одной из систем, чтобы остановить это. Однако мне нужно внести постоянные, не требующие обслуживания изменения в свой класс обработки сеансов, чтобы избежать этого в будущих проектах. Я полагаю, что это можно сделать, используя уникальное значение (например, путь сценария), чтобы поместить переменные приложения в место в $ _SESSION, которое не будет использоваться другим приложением.

Есть ли лучший способ?

Редактировать: Это на Linux. И оба приложения находятся на одном сайте.

Ответы [ 3 ]

4 голосов
/ 22 июня 2009

Вы можете убедиться, что куки-файлы сеанса будут относиться к приложению, убедившись, что домен и путь куки-файлов установлены ограниченно, например, для заявки по номеру http://www.example.com/apppath, вы можете сделать следующее:

<?php

$currentParams = session_get_cookie_params();

session_set_cookie_params($currentParams['lifetime'], '/apppath/', 'www.example.com', $currentParams['secure'], $currentParams['httponly']);

session_start();

Это оставит другие настройки сеанса без изменений.

Путь, вероятно, является важным, по умолчанию PHP выдаст cookie для домена, для которого был запрошен сайт (я думаю), так что вы, вероятно, могли бы оставить параметр домена по умолчанию.

1 голос
/ 22 июня 2009

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

Это можно сделать с помощью вызова session_set_cookie_params .

0 голосов
/ 16 октября 2009

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

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