繁体   English   中英

如何在Java EE中管理会话?

[英]How can I manage sessions in Java EE?

在我的Java EE应用程序中,我遇到了会话问题。 不同的用户可以登录到该应用程序,指定的用户可以看到他被授权的数据。 他不应该看到其他用户数据。 为了区分用户,我们使用Client_ID 一旦用户登录,我们就从数据库中获取此Client_ID并将其设置为会话,如下所示:

session.setAttribute("Client_ID",user.getClient_ID())

我们在整个应用程序中访问此会话值并将相关数据提取到该Client_ID 当用户在单个浏览器上工作时,这可以正常工作,但问题是:

假设有一个SuperAdmin,他需要查看他下的所有客户。 SuperAdmin以client_1身份登录,再次以client_2身份登录。 SuperAdmin使用相同的浏览器记录了这两次。 当我刷新client_1浏览器时,我看到了client_2详细信息,这不应该发生。

我认为我们的应用程序在同一浏览器中使用相同的会话进行两次不同的登录。 这个问题会解决什么问题? 刷新页面时,我应该看到特定客户端的正确数据。

不要使用cookie来存储会话ID,而是使用请求参数。 因此每个打开的选项卡都会请求自己的会话。 使用cookie,浏览器中的所有选项卡只有一个cookie。

PS:我认为在同一时刻在一个浏览器中登录2个或更多用户是不正确的。 您的应用程序应该检测到client_1已经对其进行了签名,并且在注销之前还可以从同一浏览器中为其他用户登录。 例如,Google的应用程序就是这样运作的。 如果SuperAdmin具有在不登录的情况下查看client_1或client_2数据的功能,也会很棒。这将使他/她不会记住几十个密码并且会提高工作效率(时间是金钱,不是吗?)。

如果您希望同一浏览器实例中的多个选项卡看到不同的内容,那么您将不得不重新设置会话管理并从URL中删除关键内容。

会话在浏览器选项卡之间共享(对于大多数浏览器都是如此),因此使用一个选项卡登录将影响其他选项卡的会话。

解决方案是使用角色而不是多次登录。 您将为client_1提供SuperAdmin角色,而客户端2则不提供。 这将减少登录两次的需要。

但无论如何,您应该只允许一个用户一次登录。 登录过程应使前一个会话无效。 我忘记了Java EE中的确切代码,但它类似于session.invalidate()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM