我有一个这样的会话$_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,以从所有其他设备上注销他。我也想删除他的会议。
您已在评论中提供了有用的详细信息:
当用户更改密码时,我需要从其他所有设备上注销该帐户。
您的问题本质上是,如果您使用会话,那么如何在设备之间实现单一登录/注销。
这是一个简单的方法:
userID
并lastSeen
进行会话。lastSeen
持有时间戳记。在会话中不保存任何用户可以更改的信息。userID
并lastSeen
在该会话中lastSeen
),因为它们仅保存不变的数据(userID,userName)logout
包含列的表userID
requestTime
session_destroy()
在logout
表中调用并添加一个条目$_SESSION['userID']
存在(意味着用户已登录)lastSeen
在最后30分钟内(否则,打电话session_destroy()
,并要求重新登录)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] 删除。
我来说两句