管理员破坏登录用户会话的简单方法

时间:2009-07-31 14:09:57

标签: session

我需要能够删除用户的会话(强迫他再次登录)。

E.g。我想从我的网站删除并禁止用户,但即使我从数据库中删除他的数据,他的会话仍然是活动的,因此他可以继续在网站上活动,直到他退出并尝试再次登录。

如何查找和删除当前登录用户的会话?

会话存储在文件系统中,我希望保持这种方式。

6 个答案:

答案 0 :(得分:1)

会话内的变量如何在每个页面检查?您没有指定任何语言,但在其中一些语言中您可以执行以下操作:


Session["username"] = <userid>;

因此,在所有页面上(或在您的母版页中),您可能会有类似

的内容

if(Session["username"] == null)
   redirect('Login');

然后,当您确定用户不再是您的信任圈时,您可以拥有以下内容:


Session["username"] = null;

这将导致用户被重定向到登录页面,并且由于您已经更改了数据库,他/她将无法再登录。请注意,您没有销毁会话本身,只是保留用户登录的部分。

答案 1 :(得分:0)

我不确定我理解你的问题。您是否希望在用户登录后禁止用户?如果是这样,你不应该只是从数据库中删除,你也应该从内存中删除会话信息。强制用户重新登录。 正如David指出的那样,如果您想一直这样做,您可能需要在数据库中保留禁止用户的列表。但是,我不确定为什么有人会这样做,因为不容易让用户首先登录。

答案 2 :(得分:0)

如果您使用cookie来跟踪会话ID,请删除cookie,之后用户将看起来是一个新的匿名用户(并且必须再次登录)。这假设有某种过程来清理磁盘上的会话数据。

答案 3 :(得分:0)

您是否有能力在服务器上安装其他软件?你能设置memcached吗?

如果是这样,您只需在memcached中存储禁止用户列表(来自db表)。当admin禁止用户时,它会更新db表和缓存列表。从那里,Web应用程序只需检查每个页面请求的缓存,这样就可以避免命中数据库。

答案 4 :(得分:0)

如果您想立即结束会话,每个页面都应检查每个请求的会话数据

禁止用户;存储登录时检查的用户状态

答案 5 :(得分:-1)

这取决于您的会话管理系统。不同的人以不同的方式管理会话。

就个人而言(而且一般而言),我会考虑添加一个允许我将用户标记为禁止的数据库列,而不是尝试删除用户。

然后检查页面访问并在设置时抛出Forbidden错误。

这显然会增加数据库的负担,因此它可能不是最好的方法。