当用户在我的网站上成功通过身份验证时,我将他们的用户 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 没有被添加到数据库上的“被阻止的用户”列表中。我只是不喜欢每次执行某些操作时都会发出另一个数据库请求来检查用户是否进入了阻止列表。尤其是因为阻止用户的情况很少见。有没有办法在不去数据库的情况下检查用户是否被阻止?
谢谢!
编辑
到目前为止,大多数答案都解决了如何取消/销毁会话,或如何阻止用户下次登录尝试。我想剩下的唯一问题是如何检查用户当前登录时是否被阻止。有没有一种方法可以做到这一点,而无需每次用户执行时都去数据库检查“被阻止的用户”列表一种行为。这与我的主要问题有关,上面用粗斜体表示。如果用户被阻止,那么我可以立即销毁会话(强制注销)并且他们也将被阻止再次进行身份验证。