我有一个这样的会议$_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'])
for $_SESSION["Id"] = 234124
。我怎样才能做到这一点?
Edit:我想做的就是:当用户更改密码时,我会删除他的所有 cookiecookies
表将他从所有其他设备中注销。我还想删除他的会话。
更新答案
您在评论中提供了有用的详细信息:
当用户更改密码时,我需要注销他的帐户
他的所有其他设备。
您的问题本质上是如果您使用会话,如何跨设备实现单点登录/注销。
这是一个简单的方法:
- 用户登录,您设置
userID
and lastSeen
会议中。lastSeen
保存一个时间戳。会话中不保存用户可以更改的信息。
- 用户登录到您设置的另一台设备
userID
and lastSeen
在那次会议上
- 跨设备的会话始终同步(除了
lastSeen
)因为它们只保存不变的数据(userID、userName)
- 在你的数据库中,有一个
logout
带列的表userID
requestTime
- 如果用户注销、更改密码或执行任何其他需要重新登录的操作,请致电
session_destroy()
并添加一个条目logout
table
- When user tries to access restricted page, you check:
- Does
$_SESSION['userID']
存在(意味着用户在某个时刻登录)
- Is
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
对于任何浏览会话中的任何特定用户。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)