我需要能够删除用户的会话(强迫他再次登录)。
E.g。我想从我的网站删除并禁止用户,但即使我从数据库中删除他的数据,他的会话仍然是活动的,因此他可以继续在网站上活动,直到他退出并尝试再次登录。
如何查找和删除当前登录用户的会话?
会话存储在文件系统中,我希望保持这种方式。
答案 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错误。
这显然会增加数据库的负担,因此它可能不是最好的方法。