PHP длительность сеанса Различные PHP приложения, один и тот же хост-сервер - PullRequest
0 голосов
/ 19 февраля 2020

Я не уверен, что это обычный случай использования, но я нормальный парень, поэтому не могу поверить, что это необычно:

У меня есть сервер, на котором запущен ЛАМПА стека. На сервере имеется несколько PHP приложений. На днях я заметил, что два совершенно разных приложения делятся информацией о сеансе. WTF ?! Я понимаю, что они делают, но почему? они доверяют серверу, но почему сервер предполагает, что два приложения доверяют друг другу?

хорошо: исправление # 1 для одного или обоих применяет session_name (). Это превосходно, и это решает проблему, если один или оба из них делают это, и никто не пытается получить сеанс других, задавая имя, но есть ли исправление, когда оба приложения враждебны друг другу? Есть ли на уровне PHP что-то, что может сделать сеансы независимыми, независимо от того, что приложения могут пытаться сделать? информация о https://www.server.com/app2/index.php et c .....

Я думал, что установка пути с помощью session_set_cookie_params () могла бы решить эту проблему, но нет, установка этой переменной ограничена путь на самом деле не имеет очевидного эффекта, который интересен - оба приложения # могут все еще добраться до сессионного материала или другое - интересно!

Я не могу поверить, что это новая проблема, и все же я не замечаю fix ....

Приветствия,

turbotas

Пример кода:

<?php
session_set_cookie_params(3600,"/webapps/test1");
session_name("mysession");
session_start(); ?>
<html>
<head>
</head>
<body>
<?php echo session_id(); ?>
</body>
</html>

представьте этот код в webapps / test1 и точно такой же в webapps / test2. Я не ожидал бы, что test2 сможет использовать состояние сеанса test1, просто указав каталог вне своей собственной точки установки - я бы ожидал, что PHP защитит от этого. Это не так - я получаю ту же сессию.

1 Ответ

0 голосов
/ 19 февраля 2020

Поскольку вы кодируете различные приложения, вам необходимо убедиться, что каждое из них сохраняет информацию о сеансе (на стороне сервера) в разных местах. Например, переменная конфигурации session.save_path указывает каталог на стороне хоста, если вы сохраняете сеансы с использованием файлов. Если вы храните информацию о сеансе в таблице базы данных, вам следует использовать разные таблицы или, скорее всего, разные базы данных.

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

...