4

我有以下问题:

  1. 用户 X 登录 PC1,session_id 为 1000。离开但忘记注销。
  2. 用户 X 登录 PC2,session_id 为 1001。
  3. 在会话 1000 超时之前,用户 Y 以用户 X 的身份访问 PC1,session_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,但保留这些值?

提前致谢。

4

2 回答 2

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();

它对我来说非常有效。

于 2014-11-17T21:14:42.950 回答
0

根据我的经验,我使用一张表来存储与会话相关的数据。该表包含两个或多个 userID 字段,lastSessionID。在您的系统上只需要获取 sessionId 和 userID 然后将其与存储在 db 中的最后一个 sessionID 进行比较是指相同的 userID。如果 U 获得相同的 sessionID 而不是继续但如果不同的重定向页面要注销。但是,要使用这种方法,您应该在每次用户登录时将 userID 和 sessionId 保存到数据库中。

于 2012-11-19T02:46:40.393 回答