在我的Java EE应用程序中,我遇到了会话问题.不同的用户可以登录到该应用程序,指定的用户可以看到他被授权的数据.他不应该看到其他用户数据.为了区分用户,我们正在使用Client_ID.一旦用户登录,我们就Client_ID从数据库中获取并在会话中设置它,如下所示:
session.setAttribute("Client_ID",user.getClient_ID())
Run Code Online (Sandbox Code Playgroud)
我们在整个应用程序中访问此会话值并将相关数据提取到该值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数据的功能,也会很棒.这将使他/她不会记住几十个密码,并且会提高工作效率(时间就是金钱,不是吗?).