当用户成功验证我的网站上,我存储他们的用户ID会话:$_SESSION['user_id']
然后我用这个整个网站,以检查用户是否可以执行某些操作。例如
if(isset($_SESSION['user_id'])){
//User is logged in, allow the following.
...
}
...
if ($_SESSION['user_id'] == $comment_user) {
//User owns the comment, go ahead and delete it.
...
}
但是,如果我发现一个登录的用户有恶意目的的,我怎么能杀死自己的登录会话,使他们无法执行这些安全行动?
要阻止用户,在数据库我可以使他们的登录信息无效,或将他们添加到验证时检查的阻止列表,以便他们不能再进行身份验证。 然而,这只能有效果,当他们下一次尝试登录。只要当前会话保持活动和他们的用户ID存储在会议上,他们被认为是验证..
- 有一种方法来取消特定的会话,强制退出?怎么样?
- 如果没有,确保被阻止的用户无法继续访问网站上的安全区域的最佳方式是什么?例如我唯一的想法是,而不是只检查
if(isset($_SESSION['user_id']))
,可以添加一个额外的检查,以确保user_id尚未被添加到数据库的“阻止用户”列表。我只是不喜欢做另一个数据库请求来检查用户是否每次执行某些操作时都进入了阻止列表。特别是因为阻止用户会很少发生。有没有办法检查用户是否被阻止,而不去数据库?
谢谢!
编辑
大部分的答案至今解决如何取消设置/销毁会话,或如何阻止他们在下一次尝试登录的用户。我想剩下的唯一问题是如何检查用户是否在当前登录时被阻止。有没有办法做到这一点,而无需每次用户执行时都去数据库检查“阻止的用户”列表一种行为。这与我的主要问题有关,其中加粗斜体以上。如果用户被阻止,那么我可以立即销毁会话(强制注销),他们也将被阻止再次进行身份验证。
你不表示你的操作系统在你的标签,但我已经基于Linux和更新的问题,重写我的答案。 – nickhar 2013-04-20 02:02:26