Jsp 选项卡之间共享的会话
我有一个JAVA web应用程序,需要停止在浏览器选项卡之间共享会话,这意味着Jsp 选项卡之间共享的会话,jsp,session,jakarta-ee,browser-tab,Jsp,Session,Jakarta Ee,Browser Tab,我有一个JAVA web应用程序,需要停止在浏览器选项卡之间共享会话,这意味着 用户打开浏览器,登录其帐户,并在同一浏览器的新选项卡中打开特定页面。根据默认设置,会话将共享到新选项卡,用户将自动登录到新选项卡。有谁能告诉我如何停止这项操作,这样我至少可以将其限制在几个敏感页面中(如果不是整个应用程序的话)。通常cookies用于会话处理。然后,所有选项卡和浏览器窗口共享同一会话。但是您可以将servlet容器配置为使用URL重写而不是cookie。(这是一个例子。) 使用URL rewrite,
用户打开浏览器,登录其帐户,并在同一浏览器的新选项卡中打开特定页面。根据默认设置,会话将共享到新选项卡,用户将自动登录到新选项卡。有谁能告诉我如何停止这项操作,这样我至少可以将其限制在几个敏感页面中(如果不是整个应用程序的话)。通常cookies用于会话处理。然后,所有选项卡和浏览器窗口共享同一会话。但是您可以将servlet容器配置为使用URL重写而不是cookie。(这是一个例子。) 使用URL rewrite,只能通过包含会话ID的URL参数来标识会话。因此,必须使用该方法使用此参数增强web应用程序的每个内部URL。如果您使用的是像Wicket这样的web框架,那么很有可能这已经为您完成了 通过URL重写,可以在同一浏览器实例的不同窗口或选项卡中有多个独立会话 更新: 作为对否决票的回应,我想澄清URL重写的不同行为: 让我们假设该网站的URL为 Cookies: 在第一个浏览器选项卡中打开 服务器创建会话并在响应中发送cookie 浏览器存储cookie 然后在第二个浏览器选项卡中打开。浏览器将此URL与最近存储的cookie关联,并将cookie添加到请求中 对于服务器,来自第一个或第二个浏览器选项卡的请求与来自同一会话的响应之间没有区别。有时,这是人们想要的行为 URL重写: 在第一个浏览器选项卡中打开 服务器创建ID为1的会话,并将参数jsessionid=1添加到响应页面中的每个URL。没有传输cookie 从第一个浏览器选项卡到同一webapp的另一个页面的所有进一步请求都包括会话ID(对于示例1) 然后从第二个浏览器选项卡打开这就是区别因为请求中没有cookie和jsessionid参数,服务器创建一个新会话(即ID 2),并将参数jsessionid=2添加到响应页面中包含的每个URL中。从现在起,来自第二个浏览器选项卡的所有后续请求都与会话2关联
因此,在同一个浏览器中有两个独立会话。如果您使用的是javascript,我可以为您提供一个解决方案。 a) 在登录屏幕中有一个隐藏参数,为该隐藏字段设置windowname
b) 当您登录(提交请求)时,在action类中检查请求参数是否不为null且是否等于登录页,这是一个有效的请求,意味着通过登录提交到登录页,如果不重定向到无效页。您在应用程序中使用的javascript可能重复-1。在URL中编码会话ID除了使会话ID在没有cookie的情况下可供客户端使用外,没有任何作用。Cookie不会在选项卡之间更改,会话ID也不会更改,从而导致URL编码的会话ID在选项卡之间保持不变。Cookie和URL重写之间存在差异。查看我的更新答案。当用户打开第一个选项卡的链接或在新选项卡中复制第一个选项卡的URL时,您仍然存在问题。是的,这是正确的。如果您需要这样做,那么URL重写是没有帮助的。但是它总比没有好,并且对于许多用例来说已经足够了。我已经删除了否决票,但是BalusC的观点是正确的。如果OP试图阻止多个选项卡被打开,那么他必须对所有超链接使用JavaScript技巧。