我正在开发一个单页 jQuery 和 Backbone.js 网络应用程序。后端是 JBoss 6 应用服务器。
到目前为止,我们有以下结构:
- 只有一个 servlet(前端控制器)。来自 JavaScript 客户端的每个请求都经过这里。
- 在 servlet 中——在某个 JS 客户端的第一个请求下——我查看了一个有状态会话 bean。对于该客户端的下一个请求,我将查找结果存储在 HTTP 会话容器中。所以每个 JS 客户端都只有一个有状态的会话 bean。此连接由会话 cookie 保存。
现在我有一个额外的要求:
当用户有两个浏览器选项卡(在一个浏览器中)时,他们应该在每个浏览器选项卡中都有两个独立的 Web 应用程序实例。因此,我对会话 cookie 有疑问,因为此会话 cookie 适用于所有浏览器选项卡。
我必须改变结构,以便:
- servlet 必须为某个 JS 客户端的第一个请求生成一个新的会话 ID。此会话 ID 被传达给客户端。
- 对于后端的每个 POST,JS 客户端都必须发送此会话 ID。
我的问题是:
到目前为止,我将查找结果保存在 HTTP Session 对象中,而且我还没有考虑生成会话 ID。但是现在我必须将它存储在其他地方,在哪里?
有没有人有这种设置的经验,可以帮助我吗?
更新:
感谢 BalusC 提供这种非常有趣的方法。
当我很好理解你时,这意味着:
一个浏览器的标签页的所有单独的 JS 客户端共享一个 HTTP 会话对象。在这个 HTTP 会话对象中,每个选项卡都有自己的入口点。这听起来真的很好。所以我仍然可以使用整个 HTTP 会话基础架构,而不必重新发明轮子。