如何取消特定用户的会话?

我有一个这样的会话$_SESSION['login'],当它等于时1,表示使用已登录到我的网站:

if ( $_SESSION['login'] == 1 ) {
    // You are logged
} else {
    // login/register
}

另外,我还有另一个包含用户ID的会话。像这样的东西:

echo $_SESSION["Id"]; 
/* It is containing the user's id (an integer number).
   Something like: 234124
*/

现在,我想为$_SESSION['login']具有特定ID的用户取消设置例如,我要unset($_SESSION['login'])$_SESSION["Id"] = 234124我怎样才能做到这一点?


编辑:我正在尝试做的所有事情:当用户更改密码时,我从cookies表中删除了他的所有cookie,以从所有其他设备上注销他。我也想删除他的会议。

甲虫汁

更新的答案

您已在评论中提供了有用的详细信息:

当用户更改密码时,我需要从其他所有设备上注销该帐户。

您的问题本质上是,如果您使用会话,那么如何在设备之间实现单一登录/注销。

这是一个简单的方法:

  1. 用户登录,设置userIDlastSeen进行会话。lastSeen持有时间戳记。在会话中不保存任何用户可以更改的信息。
  2. 用户登录到您设置的另一台设备,userIDlastSeen在该会话中
  3. 设备之间的会话始终保持同步(除外lastSeen),因为它们仅保存不变的数据(userID,userName)
  4. 在您的数据库中,有一个logout包含列的表userID requestTime
  5. 如果用户注销,更改密码或执行其他需要重新登录的操作,则session_destroy()logout表中调用并添加一个条目
  6. 当用户尝试访问受限页面时,您检查:
    • 是否$_SESSION['userID']存在(意味着用户已登录)
    • lastSeen在最后30分钟内(否则,打电话session_destroy(),并要求重新登录)
    • 是否有与用户的ID中的一个注销请求,logout并与requestTime > lastSeen(手段,因为我们最后一次看到用户,她要求将其从其他设备注销)。如果是这样,则session_destroy()需要再次登录。

原始答案

会话是独立处理的。当请求到达时,$_SESSION仅该用户数据就会加载到内存中。因此,如果用户ID 5发出请求,则您将无权访问用户7的会话数据(没有黑客)。

如果您想取消当前用户的会话,无论该用户是谁,都可以执行以下操作之一:

session_destroy(); //clears everything for the current user
unset($_SESSION['login']);// clears just this variable for the current user

如果从一个用户的浏览会话中,您想与另一个用户打交道:我看不到用例。听起来这会对安全性造成负面影响,这让我质疑您的更大体系结构。它破坏了会话的全部目的:在服务器上为每个用户提供一个隔离的持久性存储柜。

无论如何,要从另一个用户的浏览活动中更改随机用户的会话数据(再次,为什么?),请使用数据库来保存和检索值。一个表可以很简单:

userID | sessionData | sessionExpires

您可以将会话数据存储在JSON中,json_encode并可以json_decode从任何浏览会话中针对任何特定用户检索会话数据

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章