php销毁一个不是当前会话的会话

时间:2011-12-01 00:06:11

标签: php session

如果用户打开会话,我想销毁他可能拥有的所有其他会话。

我知道session_destroy();但它只会破坏当前会话。

如何销毁其他会话? (我知道其他会话ID)

3 个答案:

答案 0 :(得分:5)

如果您有要销毁的会话的会话ID,则可以将其传递给session_start()以恢复该会话,将其销毁,然后再次调用session_start()以创建新会话。我没有试过这个确认它会起作用,但似乎应该这样。

如果您没有要销毁的会话的会话ID,我不确定是否有一种理智,干净,便携的方式来执行此操作。

答案 1 :(得分:2)

只要会话包含标识其所属用户的值,这在技术上是可行的。

例如,您可以将会话存储在数据库中,然后通过删除数据库中的所有其他会话来销毁当前活动的所有会话。

您在问题中写道,您已经知道要销毁的其他会话ID($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();

这与会话商店无关。如果您正在使用文件系统,则可以将文件与要删除的会话ID取消链接。

答案 2 :(得分:0)

在调用session_start()之前设置默认的会话处理程序:

session_set_save_handler(new \SessionHandler());

然后,使用存储在$ sessionID中的ID销毁会话:

(new \SessionHandler())->destroy($sessionID);