0

我正在尝试实现这样的功能,当用户在一个地方登录时,当他尝试登录到其他地方时,他应该自动从前一个地方注销。

就像在 GMAIL..

如果有人可以给我这个概念,因为我认为我需要将用户登录状态保存在 Db 中,因为会话看起来没有帮助。但是我不明白我们如何更新数据库中的用户状态,如果在 5 分钟内没有活动(我将如何捕获数据库中的不活动和更新)。

如果有人可以请指导,我现在已经为此苦苦挣扎了几个小时。

谢谢

4

2 回答 2

0

当用户登录时,将带有 id 的用户会话添加到哈希图中。当同一用户再次登录时,检查 HashMap 中的条目,如果可用,则使会话无效并为用户创建新会话。

于 2013-10-24T22:33:02.557 回答
0

如果您使用的是 Spring Security,它提供了开箱即用的此功能。否则:

创建一个java.util.Map(首选 ConcurrentMap,因此同时操作它不会损坏它),并将其存储在应用程序范围(ServletContext)中。

现在,您将在地图中登录时存储每个用户及其会话的引用,如果用户再次登录,只需获取先前的会话对象并使其无效。

现在实现 的实例javax.servlet.http.HttpSessionListener,并在void sessionDestroyed(javax.servlet.http.HttpSessionEvent httpSessionEvent);方法中从 Map 中删除指定的会话。(无论是由容器自动完成还是以编程方式执行,都会在会话失效时调用此侦听器)。只需注册这个监听web.xml器,一切就完成了。

ps 我知道,如果您将应用程序部署在 Web 容器集群上,这会有点困难,但是当您只有一个服务器时,没关系。ps 我不建议将会话信息存储在数据库中。

于 2013-10-24T22:51:53.723 回答