为了账号安全,请及时绑定邮箱和手机立即绑定

如何在浏览器选项卡中进行不同的会话?

如何在浏览器选项卡中进行不同的会话?

临摹微笑 2019-07-02 09:42:58
如何在浏览器选项卡中进行不同的会话?在使用JSP和Servlet用java实现的web应用程序中,如果我将信息存储在用户会话中,这些信息将从同一个浏览器的所有选项卡中共享。如何在浏览器选项卡中进行不同的会话?在本例中:<%@page language="java"%><%String user = request.getParameter("user");user = (user == null ? (String)session.getAttribute("SESSIONS_USER") : user);session.setAttribute("SESSIONS_USER",user);%><html><head></head><body><%=user %><form method="post">User:<input name="user" value=""><input type="submit" value="send"></form></body></html>将此代码复制到jsp页面(testpage.jsp),将此文件部署在服务器上Web应用程序的现有上下文中(我使用ApacheTomcat),然后使用正确的URL打开浏览器(FF、IE7或Opera)(localhost/context1/testpage.jsp),在输入中键入您的姓名并提交表单。然后在同一个浏览器中打开一个新选项卡,然后您可以在新选项卡上看到您的名称(从会话中获取)。小心浏览器缓存,有时它似乎不会发生,但它在缓存中,刷新第二个选项卡。谢谢。
查看完整描述

3 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

您可以使用HTML 5 SessionStorage(window.sessionStorage)。您将生成一个随机ID,并在每个浏览器选项卡中保存会话存储。然后每个浏览器选项卡都有自己的ID。

使用sessionStorage存储的数据不存在于浏览器选项卡之间,即使两个选项卡都包含来自同一域源的网页。换句话说,sessionStorage中的数据不仅限于调用页面的域和目录,还限于包含页面的浏览器选项卡。与Session cookie形成对比,后者确实将数据从选项卡持久化到选项卡。


查看完整回答
反对 回复 2019-07-02
?
萧十郎

TA贡献1815条经验 获得超13个赞

您必须认识到,服务器端会话是对HTTP的人为附加。由于HTTP是无状态的,因此服务器需要以某种方式识别请求属于它所知道的某个特定用户,并且有一个会话。有两种方法可以做到这一点:

  • 曲奇饼。更简洁、更流行的方法,但这意味着所有浏览器选项卡和窗口都由一个用户共享-imo这实际上是可取的,而且我会对一个让我为每个新选项卡登录的站点感到非常恼火,因为我使用选项卡非常密集。
  • URL重写站点上的任何URL都附加了会话ID。这是更多的工作(你必须在任何地方做一些事情-内部链接),但可以在不同的选项卡中有单独的会话,尽管通过链接打开的选项卡仍然会共享会话。这也意味着用户在访问您的站点时总是必须登录。

你到底想做什么?为什么要让选项卡有单独的会话?也许有一种方法可以实现你的目标,而不使用会话呢?

编辑:对于测试,还可以找到其他解决方案(例如在单独的VM上运行多个浏览器实例)。如果一个用户需要同时扮演不同的角色,那么应该在应用程序中处理“角色”的概念,以便一个登录可以有多个角色。您必须决定这样做,使用URL重写,还是仅仅适应当前的情况,是否更容易被接受,因为在基于cookie的会话中单独处理浏览器选项卡是不可能的。


查看完整回答
反对 回复 2019-07-02
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

你不应该。如果您想要这样做,您需要通过动态编写URL来强制用户使用应用程序的单个实例,使用一个sessionID(不是sessionid,它不会工作)id,并在每个URL中传递它。

我不知道你为什么需要它,但除非你需要制作一个完全无法使用的应用程序,否则不要这么做。


查看完整回答
反对 回复 2019-07-02
  • 3 回答
  • 0 关注
  • 537 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信