Java 防止在Play framework中多次登录网站

Java 防止在Play framework中多次登录网站,java,javascript,playframework,Java,Javascript,Playframework,我正在使用Play framework for Java设计一个程序。这是一个需要用户登录的网站,它需要阻止用户登录已经登录的帐户 当用户登录时,用户名存储在缓存中(使用memcached)。当用户注销时,用户名将从缓存中取消。如果对缓存中存在的用户名进行登录尝试,则会拒绝登录尝试 例如,用户使用用户名“joe”登录。来自另一台计算机的人试图使用用户名“joe”登录,但被拒绝,因为“joe”已经登录 很简单,除非用户关闭浏览器选项卡,否则他们会被锁定,因为他们的用户名仍然存在于缓存中 因此,使用

我正在使用Play framework for Java设计一个程序。这是一个需要用户登录的网站,它需要阻止用户登录已经登录的帐户

当用户登录时,用户名存储在缓存中(使用memcached)。当用户注销时,用户名将从缓存中取消。如果对缓存中存在的用户名进行登录尝试,则会拒绝登录尝试

例如,用户使用用户名“joe”登录。来自另一台计算机的人试图使用用户名“joe”登录,但被拒绝,因为“joe”已经登录

很简单,除非用户关闭浏览器选项卡,否则他们会被锁定,因为他们的用户名仍然存在于缓存中

因此,使用javascript,我捕获了window.onbeforeunload事件,以重定向到运行清除缓存的Java方法的路由。问题在于,当用户单击链接或重新加载页面时,会触发window.onbeforeunload。因此,如果用户重新加载页面,他们将注销,或者如果他们单击网站内的链接,他们将注销。有没有办法防止这种情况发生

编辑: 我正在使用安全性。通过身份验证以确保人们无法访问网站,除非他们的cookie中有会话。我有一个扩展控制器的BaseController,我的所有控制器都扩展BaseController(处理登录页面的控制器除外),BaseController带有以下注释:

@Security.Authenticated(Secured.class)

安全性确保当有人试图访问网站时,如果他们没有会话,他们会被重定向到登录页面。一旦他们登录,将使用会话创建一个cookie,并对其进行保护,以允许他们访问页面。

缓存中的过期时间如何?为了防止密钥被删除,即使用户仍然处于活动状态,也可以创建一个组合动作,在每个新请求中刷新缓存


Alberto

为什么不在缓存条目上添加一个TTL,并在用户每次有任何动作时更新它呢?我在原始帖子中添加了一个编辑,提供了更多信息。如果我在缓存上创建一个TTL,那么可能会出现以下情况:1。用户访问登录页面2。用户通过身份验证并被定向到登录页3。用户关闭浏览器,从而在会话4中删除cookie。用户重新打开浏览器并尝试直接访问网站URL 5。没有cookie,因此它们被重定向到登录页面6。用户无法登录,因为他们的缓存仍然存在,因为TTL尚未过期Yet当浏览器关闭并删除会话cookie时,是否有办法让它在此时运行javascript函数以清除缓存?当关闭浏览器时,cookie不会被删除:)。如果您没有对cookie设置超时,浏览器关闭时它不会被删除?否。。。至少我不这么认为。