Уничтожить переменные сеанса в другом приложении - PullRequest
0 голосов
/ 21 февраля 2009

У меня есть два приложения, одно приложение внешнего интерфейса, другое приложение внутреннего уровня.

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

Вопрос теперь в том, можно ли мне уничтожить бэкэнд-сессию из внешнего интерфейса? Бэкэнд использует суперглобальный массив $ _Session для хранения всей информации о сеансе. Если да, то как?

Ответы [ 5 ]

1 голос
/ 22 февраля 2009

Да, это так.

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

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

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

использование:

session_destroy();
0 голосов
/ 22 февраля 2009

Если два приложения находятся в разных поддоменах одного и того же домена, вы можете сохранить файл cookie, сообщающий администратору приложения, что пользователь вышел из системы. Затем попросите приложение администратора удалить сеанс и файл cookie, вышедший из системы.

0 голосов
/ 21 февраля 2009

Если вы можете использовать веб-сервис, предоставляемый внутренним приложением, для регистрации пользовательского IN, почему вы не можете использовать его и для входа пользователя OUT? Таким образом, одно приложение не должно знать, как другое реализует сеансы (или иметь привилегии для того, чтобы обойти их).

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

0 голосов
/ 21 февраля 2009

как вы относите внешние сеансы к внутренним сеансам? если вы сохраняете сопоставление имени сеанса (уникальное значение, используемое в качестве идентификатора сеанса) входных и внутренних сеансов, вы можете легко найти внутренний сеанс (его можно сохранить в файлах или базе данных), а затем удалить запись сеанса. используйте эту строку, чтобы узнать, какой обработчик используется для хранения файлов сеанса:

$handler = init_get('session.save_handler');

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

 $path = ini_get('session.save_path');

, затем вы можете удалить файл сеанса или запись базы данных.

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

0 голосов
/ 21 февраля 2009

Вам потребуется удалить запись сеанса из базы данных или файла (в зависимости от конфигурации вашей системы).

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

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