【问题标题】:php destroy a session which is not the current sessionphp 销毁不是当前会话的会话
【发布时间】:2011-12-01 00:06:11
【问题描述】:

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

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

如何销毁另一个会话? (我知道另一个会话 id)

【问题讨论】:

  • 你怎么知道他拥有哪些会话?
  • 假设我知道其他会话的 session_id。
  • 你想破坏什么会话?你有它的 id 还是你想销毁所有其他会话?
  • 如果你有它的 ID,我建议你使用 Trott 提到的解决方法
  • 谢谢,我会这么做的。

标签: php session


【解决方案1】:

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

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

【讨论】:

  • 谢谢。这就是我一直在寻找的答案。
【解决方案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 的文件。

【讨论】:

    【解决方案3】:

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

    session_set_save_handler(new \SessionHandler());
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-25
      • 2011-11-06
      • 1970-01-01
      • 1970-01-01
      • 2011-02-01
      • 1970-01-01
      • 2013-10-18
      相关资源
      最近更新 更多