在标签之间共享会话

Oce*_*jai 7 session jsp java-ee browser-tab

我有JAVA Web应用程序,我需要停止在浏览器选项卡之间共享会话,这意味着

用户打开浏览器,登录到他的帐户并在同一浏览器的新选项卡中打开特定页面.根据默认设置,会话将共享到新选项卡,用户将自动登录到新选项卡.任何人都可以告诉我这是如何停止的,所以我至少可以在几个敏感页面中限制它,如果不是整个应用程序.

van*_*nje 9

通常cookie用于会话处理.然后所有选项卡和浏览器窗口共享同一会话.但您可以将servlet容器配置为使用URL重写而不是cookie.(这是Jetty的一个例子.)

使用URL重写时,会话仅通过包含会话ID的URL参数进行标识.因此,必须使用此方法使用此参数增强Web应用程序的每个内部URL HttpServletResponse.encodeURL().如果您正在使用像Wicket这样的Web框架,那么很可能已经为您完成了这项工作.

通过URL重写,可以在同一浏览器实例的不同窗口或选项卡中具有多个独立会话.

更新: 为了响应downvote我想清楚URL重写的不同行为:

我们假设网站的网址是http://webapp.com.

Cookie:在第一个浏览器标签中 打开http://webapp.com.

服务器创建会话并在响应中发送cookie.

浏览器存储cookie.

然后在第二个浏览器选项卡中打开http://webapp.com.浏览器将此URL与最近存储的cookie相关联,并将cookie添加到请求中.

对于服务器,来自第一个或第二个浏览器选项卡的请求与来自同一会话的响应之间没有区别.有时这是理想的行为.

URL重写:在第一个浏览器选项卡中 打开http://webapp.com.

服务器创建ID为1的会话,并将参数jsessionid = 1添加到响应页面中的每个URL.没有转移cookie.

来自第一浏览器选项卡的对同一webapp的另一页面的所有进一步请求包括会话ID(对于示例1).

然后从第二个浏览器选项卡打开http://webapp.com.这是区别!由于请求中没有cookie且没有jsessionid参数,服务器会创建一个新会话(即ID 2)并将参数jsessionid = 2添加到响应页面中包含的每个URL.从现在开始,来自第二个浏览器选项卡的所有后续请求都与会话2相关联.

所以你在同一个浏览器中有两个独立的会话.