Я работаю с сессиями в PHP, и у меня есть разные приложения в одном домене. Проблема заключается в том, что файлы cookie зависят от домена, поэтому идентификаторы сеансов отправляются на любую страницу в одном домене. (Я не знаю, есть ли способ заставить куки работать по-другому). Таким образом, переменные сеанса видны на каждой странице в этом домене.
Я пытаюсь реализовать собственный менеджер сессий, чтобы преодолеть это поведение, но я не уверен, правильно ли я об этом думаю.
Я хочу полностью избежать системы сеансов PHP и создать глобальный объект, который будет хранить данные сеанса и в конце сценария сохранять их в базе данных.
- При первом доступе я сгенерирую уникальный session_id и создаю cookie
- В конце сценария сохраните данные сеанса с помощью session_id, отметок времени для начала сеанса и последнего доступа, а также данных из $ _SERVER, таких как REMOTE_ADDR, REMOTE_PORT, HTTP_USER_AGENT.
- В каждой базе данных chceck доступа для session_id, отправляемого в cookie от клиента, проверьте IP, Порт и пользовательский агент (для безопасности) и прочитайте данные в переменную сеанса (если не истек срок действия).
- Если идентификатор сеанса истек, удалите его из базы данных.
Эта переменная сеанса будет реализована как синглтон (я знаю, что получу тесную связь с этим классом, но я не знаю о лучшем решении).
Я пытаюсь получить следующие преимущества:
- Переменные сеанса, невидимые в других скриптах на том же сервере и в том же домене
- Пользовательское управление истечением сессии
- Способ просмотра открытых сессий (что-то вроде списка онлайн-пользователей)
Я не уверен, пропускаю ли я какие-либо недостатки этого решения. Есть ли лучший способ?
Спасибо !!
UPDATE:
я не объяснил это достаточно подробно и вызвал здесь много недоразумений, поэтому хочу прояснить, с чем имею дело:
Я создаю приложение сервера SOA, которое будет развернуто во многих различных средах. У него не будет собственного веб-сервера, поэтому в этих средах могут быть и другие приложения PHP. Сотрудники этих компаний будут иметь учетные записи пользователей в этом приложении, поэтому они получат файл cookie с идентификатором сеанса в этом приложении.
Как мы знаем, веб-сервер, работающий на PHP при загрузке данных сеанса, не имеет значения (по крайней мере, по умолчанию), какой скрипт из какой директории создал сеанс. Все, что ему нужно, это идентификатор сессии. Этот идентификатор сеанса отправляется с каждым запросом от клиента к серверу. Из ваших ответов я узнал, как PHP может ограничивать файлы cookie для определенного каталога, но злоумышленник может редактировать файлы cookie, поскольку они хранятся на его компьютере. Злоумышленник в моем случае может иметь доступ для написания и выполнения php-скрипта в той же среде, но не имеет доступа к моему приложению и его базе данных. Если он создает сценарий, он может использовать идентификатор сеанса из файла cookie моего приложения, таким образом, он имеет доступ для чтения и редактирования данных сеанса в моем приложении и получения доступа к частям моего приложения, которые ему нельзя разрешить.
Я вижу, что при развертывании приложения в такой среде будут другие угрозы безопасности, поэтому я стремлюсь к лучшей изоляции, которую я могу сделать, и обработка сеансов по умолчанию кажется слишком опасной и не предназначена для таких применений.
Так что мой вопрос, если вы видите что-то, что менее безопасно, менее гибко в моем дизайне, чем это было бы с управлением сеансами по умолчанию ..
Спасибо за ваши ответы, ..