grails - 如何为不同的浏览器选项卡创建新会话

时间:2017-10-26 17:43:26

标签: session grails

我正在尝试使用grails创建简单的Web应用程序。

现在,当用户在不同的标签页中打开相同的页面时,我需要创建新的会话,以避免在所有打开的标签页中显示相同的数据。

是否可以定义在新标签页中打开该页面?如果有可能如何在控制器动作中创建新会话?。

或者可能有办法获得类似浏览器标签的内容?

2 个答案:

答案 0 :(得分:2)

您似乎误解了会话的工作方式并分配了它们。

会话是按浏览器(和域/主机)。

因此,即使您可以在控制器操作中创建新会话也无济于事,因为这将成为浏览器所有选项卡的会话,并且之前的会话将被无效/放弃。

没有浏览器标签ID这样的东西。

您需要解决导致数据关联性基于浏览器会话的根问题。根据其他内容制作。 (只是一般性的建议,因为这不是你的问题的一部分,你没有提供任何细节。)

答案 1 :(得分:0)

以下是我对此的看法。

您要完成的任务可能看起来很简单,但您需要一些机制来捕获每个会话是谁是一个弹簧安全用户名还是实际的http会话ID,然后存储它们到目前为止访问过的控制器操作并在反复检查时保持不断更新。 像

这样简单的东西
[
['10001':[controller:'someController', 'someAction'],[controller:'someController1', 'someAction1'],
],
['10002':[controller:'someController', 'someAction'],[controller:'someController1', 'someAction1']
]

哪里' 10001'是你的地图的关键,并且是你的会话ID,然后它包含你所捕获的地方的内部地图列表,如果它们已经存在就会尝试解决 - 基本上这里的问题是....

AI在哪里说如果他们看到了someAction1,他们应该看到action2以及当他们看到action1和action2时会发生什么,以及接下来的循环和接下来会发生什么?

无论哪种方式,您都可以将所有这些作为包含上述地图的会话变量来执行 - 您将遇到的问题将是并发映射(它会同时更新和读取)。 因此,您需要查看并使用并发哈希映射来解决此类问题。

无论哪种方式,上述所有问题都是一致的逻辑,以确定他们是否已经看到了所有可能的选项,然后是下一步?

我认为你从不同的角度思考它会好得多,因为它基于时间戳并移动查询或其他任何东西来随机生成基于该时间戳的不同输出,因为这总是会改变无论用户如何