我正在开发一个单页jQuery&Backbone.js Web应用程序。后端是JBoss 6应用服务器。
到目前为止,我们具有以下结构:
现在,我还有一个附加要求:
当用户有两个浏览器选项卡(在一个浏览器中)时,他们应在每个浏览器选项卡中具有两个独立的Web应用程序实例。因此,会话cookie存在问题,因为此会话cookie适用于所有浏览器选项卡。
我必须更改结构,以便:
我的问题是:
到目前为止,我将查找结果保存在HTTP Session对象中,而且我还没有考虑过生成会话ID。但是现在我必须将其存储在其他地方,在哪里?
有没有人经历过这种设置,可以为我提供帮助吗?
更新:
感谢BalusC的这种非常有趣的方法。
当我对您的了解很好时,这意味着:
一个
浏览器的选项卡的所有单个JS客户端共享一个HTTP会话对象。在此HTTP会话对象中,每个选项卡都有其自己的入口点。听起来真的很好。因此,我仍然可以使用整个HTTP会话基础结构,而不必重新发明轮子。
在您存储的初始GET请求上自动生成一个唯一值,并将其作为隐藏的输入值传递给每个后续回发。使用此唯一值作为代表视野范围数据的会话属性的标识符。
在全新会话的第一个请求中,请执行以下操作:
Map<String, ViewData> viewScope = new HashMap<String, ViewData>();
session.setAttribute("viewScope", viewScope);
(ViewData
代表您要在同一视图上的回溯中跟踪的特定于视图的数据)
在每个GET请求期间,请执行以下操作:
String viewDataId = UUID.randomUUID().toString();
viewScope.put(viewDataId, new ViewData());
request.setAttribute("viewDataId", viewDataId);
在生成HTML的过程中,请执行以下操作:
<input type="hidden" name="viewDataId" value="${viewDataId}" />
在每个POST请求期间,请执行以下操作:
ViewData viewData = viewScope.get(request.getParameter("viewDataId"));
// Get/set view-specific data in there.
确保jQuery还会传递此隐藏的输入(如果您已经正确使用$(form).serialize()
或例如AjaxForm插件来对表单进行Ajax化,那么这应该不是一个大问题)。
如果您熟悉JavaEE的MVC框架JSF,那么了解其@ViewScoped
注释与上述大致相同可能会很有用。另请参见ao
如何选择正确的bean作用域?
问题内容: 在同一浏览器的选项卡/窗口之间进行JavaScript通信的最可靠方法是什么?例如,当选项卡2开始播放音频时,选项卡1以某种方式知道这一点并可以暂停其播放器。 我正在建立一个带有音乐播放器的网站…因此,如果您现在打开该网站的两个标签,则可以同时在两者上播放音乐。这显然是不好的,所以我正在尝试寻找解决方案。 有任何想法吗?谢谢 问题答案: 这是一个旧的答案,我建议使用此处描述的现代版本:
问题内容: 背景:我正在做一些用户界面测试,这些测试需要检测人们是否在关注。 具体来说,我想知道如果当前的选项卡处于非活动状态,或者浏览器窗口处于非活动状态,那么在不同的浏览器中,我的Javascript代码将受到什么影响。到目前为止,我已经挖掘了以下内容: 我有以下问题: 除了移动浏览器以外,当选项卡处于非活动状态时,桌面浏览器是否会暂停JS执行?什么时候使用哪些浏览器? 哪些浏览器减少重复次数
我对python很陌生,所以我是一个新手,我尝试过搜索,但似乎没有什么效果(至少我看到和测试过)。我还尝试了“webbrowser.get(chrome_path).open(url)”,但这并没有真正帮助我
问题内容: 我尝试使用以下代码在关闭浏览器窗口时收到警报: 它可以工作,但是如果页面包含一个超链接,则单击该超链接会引发相同的警报。仅在关闭浏览器窗口时才需要显示警报,而在单击超链接时则不需要。 问题答案: 保持您的代码不变,并使用jQuery处理链接:
问题内容: 我遇到的情况是,单击按钮打开带有搜索结果的新浏览器窗口。 有什么方法可以连接并聚焦到新打开的浏览器窗口吗? 并使用它,然后返回到原始(第一个)窗口。 问题答案: 您可以在以下窗口之间切换:
我第一次使用JSON Web令牌(JWT)。我正在制作一个节点。js应用程序。我想使用JWT进行身份验证。根据文档,我将JSON令牌返回到前端。 但是我不知道如何将这个JSON令牌保存到我的浏览器头中,这样它就不会丢失,并随头一起再次发送到后端。如何将它保存在我的浏览器存储中,并在每次向后端发送请求时将其添加到请求头中?