如果用户打开会话,我想销毁他可能拥有的所有其他会话。
我知道session_destroy();
但它只会破坏当前会话。
如何销毁其他会话? (我知道其他会话ID)
答案 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);