0

我有一个在 Spring MVC 中构建的基于 ajax 的站点。在标题上,它显示已登录的用户和一个用于浏览其他页面的菜单。单击菜单页面时通过 ajax 调用更改,菜单/标题保持不变。这是我面临的一个问题,

1- Logged in as user1
2- Click Profile Page to see its profile (via ajax loads fine)
3- Open another tab, open the same site, logged out and log in as user2
4- Come back to First Tab, click Profile Page again
This time it shows profile of User2 but on header/menu its still showing User1

如何实施此解决方案?还是这里有更好的解决方案?

-- As soon as a user is logged out, the web site should refresh to login page on all tabs where its opening on same browser.
4

1 回答 1

0

不确定您是否理解为什么会出现这种行为,所以我快速解释一下。

解释

通常每个浏览器实例而不是每个选项卡都有一个会话。因此,如果您启动浏览器 X 两次并在每个实例中加载一次应用程序,您将不会遇到此问题。

但是,在单个浏览器实例中,加载到选项卡 1 的应用程序不会意识到您在选项卡 2 中以不同的用户注销并登录。它为每个浏览器实例保留一个会话 cookie。然后,如果您与选项卡 1 中的应用程序交互,它会找到您在选项卡 2 中登录时创建的会话 cookie 并使用它。

解决方案

一种解决方案(多种解决方案)是每次加载内容页面之一时更新标题。为此,您需要在用户登录时将用户信息(id、姓名等)存储在 cookie 中,并在加载内容页面时从 cookie 中读取。或者您将用户信息与每个内容页面一起发送,当然它必须隐藏在某个地方。

于 2013-06-01T11:49:44.013 回答