PHP уничтожить сеанс, который не является текущим сеансом - PullRequest
2 голосов
/ 01 декабря 2011

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

Я знаю session_destroy();, но он уничтожает только текущий сеанс.Я делаю, чтобы уничтожить еще один сеанс?(Я знаю другой идентификатор сессии)

Ответы [ 3 ]

5 голосов
/ 01 декабря 2011

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

2 голосов
/ 01 декабря 2011

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

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

Вы написали в своем вопросе, что уже знаете другой идентификатор сеанса, который хотите уничтожить ($sessionIDDelte):

$backup = session_id($sessionIDDelte);
session_start(); # load session data
$_SESSION = array(); # do not use unset();
session_destroy(); # close and remove session

session_id($backup); # switch to current session
session_start();

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

0 голосов
/ 14 июня 2019

Установите обработчик сеанса по умолчанию перед вызовом session_start ():

session_set_save_handler(new \SessionHandler());

Затем уничтожьте сеанс с идентификатором, сохраненным в $ sessionID:

(new \SessionHandler())->destroy($sessionID);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...