Как уничтожить определенную сессию PHP

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

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

Каков наилучший подход к этому? Метод уничтожения Zend_Session не принимает параметр, аналогично функция PHP session_destroy не делает ни того, ни другого.

Я рассматриваю два варианта:

  1. Удаление информации о сеансе непосредственно из файла / memcache, но предпочтет «более чистый» подход, чем это.

  2. Проверка на каждом запросе страницы, если это пользователь «токена»; и если затем проверить, истек ли их токен, сохранив список. Это добавляет накладные расходы на занятый веб-сайт, но может быть моим единственным вариантом.

Или есть третий / лучший подход, который я не вижу?

Если вы хотите, чтобы у вас была возможность «нажимать» сеансы пользователя, единственный способ сделать это – использовать MySQL (или другой db, sqlite even) для хранения сеансов.

Затем вы можете просто удалить записи из db, чтобы убить сеанс.

Это также позволяет вам делать такие вещи, как «взять под контроль» сеанса конкретного пользователя и другие вещи 🙂

См. Это для очень простого прогона через: http://www.devshed.com/c/a/MySQL/Custom-Session-Management-Using-PHP-and-MySQL/ (не лучший пример, но достаточно хороший пример для запустите вас).

РЕДАКТИРОВАТЬ

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

Нет необходимости выполнять ручную обработку сеанса.

session_id () может принимать параметр, идентификатор сеанса, с которым вы хотите работать.

Таким образом, когда вы передаете пользователя на сайт-партнер, переходите через их session_id (или какой-то токен или что-то еще).

Затем разрешите сайту-партнеру ударить по сценарию следующим образом:

убить-пользователь session.php

<?php /** * Destroy any active session identified by $_POST['sid'] */ session_id($_POST['sid']); session_start(); //this line may not even be necessary session_destroy(); //destroys that session. 

Поэтому, когда пользователь выходит на сайт партнера, партнерский сайт POST передает session_id (который вы дали им) вашему скрипту kill-user-session, а сеанс пользователя уничтожается на вашем сервере.

Конечно, вы, вероятно, хотите ограничить доступ к kill-user-session.php каким-либо способом.

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

 <img src="mainwebsite/logout.php"> 

mainwebsite / logout.php:

 <?php session_destroy(); ?>