PHP:根据 id 删除另一个会话

ESL*_*ESL 4 php security session login sessionid

我有以下问题:

  1. 用户 X 登录 PC1,session_id 为 1000。离开但忘记注销。
  2. 用户 X 登录 PC2,session_id 为 1001。
  3. 在会话 1000 超时之前,用户 Y 以用户 X 的身份访问 PC1,会话 ID 为 1000。

通过这种方式,两个用户以同一用户的身份在不同的 PC 和不同的会话 ID 中获得访问权限。我想要做的是每次用户登录(完成)时存储新的 session_id,并删除以前存储的 session_id。但是我不知道如何在不更改当前会话的情况下删除或修改给定 id 的会话文件。

我的意思是,我想做以下事情:

  1. 用户 X 登录 PC1,session_id 为 1000。脚本将 1000 存储为 last_session_id。离开但忘记注销。
  2. 同一用户登录 PC2,session_id 为 10001。脚本获取 last_session_id (1000) 并删除该会话信息;然后将 1001 存储为新的 last_session_id。
  3. 用户 Y 使用 session_id 1000 访问 PC1,但无法以 X 身份访问,因为信息已被删除。

*session_id(old_session)* 可以正常工作吗?或者该函数只是重命名当前会话 ID,但保留值?

提前致谢。

小智 5

我找到了这个

$session_id_to_destroy = $sessionid;
// 1. commit session if it's started.
if (session_id()) {
    session_commit();
}

// 2. store current session id
session_start();
$current_session_id = session_id();
session_commit();

// 3. hijack then destroy session specified.
session_id($session_id_to_destroy);
session_start();
session_destroy();
session_commit();

// 4. restore current session id. If don't restore it, your current session will refer to the session you just destroyed!
session_id($current_session_id);
session_start();
session_commit();
Run Code Online (Sandbox Code Playgroud)

它非常适合我。

  • 答案归功于 php.net 上此[帖子](http://php.net/manual/en/function.session-destroy.php#114709) 上的用户 Jack Luo。 (2认同)