【问题标题】:Session timeout on multiple tabs多个选项卡上的会话超时
【发布时间】:2011-07-27 21:13:35
【问题描述】:

我正在使用 Spring acegi 安全性在多个应用程序上进行单点登录。如果用户也在浏览器上写东西,我需要在客户端延长会话超时。如果用户打开了多个会话或浏览器,那么我需要考虑他打开的所有会话的活动会话。如果他是活跃的,那么即使他在其他会话中不活跃,我也不应该注销他。 请向我提出任何如何在客户端跟踪和了解的想法。

任何想法都非常受欢迎。谢谢。

在两个选项卡中运行应用程序app1tab1tab2。超时为10 分钟。所以我们在客户端的java脚本中实现了超时功能。此代码在 10 分钟后给出确认框。如果用户说继续,我们将通过触发活动 url 来扩展会话。如果应用程序在单个选项卡中运行,则此方法有效。相同的应用程序app1 在多个选项卡中打开说tab1,tab2。此处应用程序 app1 在两个选项卡中打开,但在单个会话中打开。我们正在唤醒在tab2 中打开的应用程序,而不是在tab1 中使用应用程序。所以tab1中的应用程序在10分钟内处于非活动状态。然后tab1中的应用程序给出确认框,我们不回答该确认框tab2将申请注销。那么当我们在 Tab2 上工作时不注销的解决方案是什么。有任何想法吗?如何跟踪应用程序是否在其他选项卡中处于活动状态?

【问题讨论】:

  • 这是类似的问题link

标签: session-timeout spring-security


【解决方案1】:

修改了 javascript 中的代码以将 ajax 请求发送到服务器并查找最新活动。 如果最近的活动少于 10 分钟,则不会退出。

【讨论】:

    【解决方案2】:

    最简单的方法是将登录会话与共享域相关联。假设您有 app1.domain.com、app2.domain.com、app3.domain.com,但是您在 domain.com 上进行了 SSO,并且它们都共享该会话 cookie。这只是在会话cookie上设置域的问题——我相信你可以在配置中做到这一点。无论如何,这很容易做到,所以如果这适用于您的问题,那就去做吧。 (也许在没有域层次结构的情况下有一些棘手的方法可以做到这一点,但我不确定它是什么。)

    如果这不可行,您可能需要另一种方式来存储会话。我的第一个想法是将会话放入数据库中。有了这些,您可以同步和集中管理超时。这可能需要一些自定义代码——但应该不会那么多。

    不确定这是否适用,但我在implementing timeout on the client side as well 上写下了我的想法。

    【讨论】:

      【解决方案3】:

      这不是直截了当的答案。 (因为我认为没有解决方案)

      您可以尝试在应用程序之间触发一个像素 (*),从而延长会话时间。
      假设您有:
      应用1,应用2,应用3

      用户登录到 app1 和 app2 并且他只在 app1 上工作。如果您在他在 app1 上发出的每个 http 请求都从他的浏览器向 app2 发射一个像素,那么他认为他在 app 2 上也处于活动状态。
      我认为,如果您在应用程序 app1、2 和 3 之间每 2 分钟触发一次像素,您可以在应用程序之间保存会话。

      我已经在 PHP 应用程序中完成了这个 twick,它并不容易,但它是可行的。

      *pixel - 这是一个隐藏的 http 请求,在服务器端运行脚本。可以通过 ajax、img、script src=""、iframe 等来实现。

      【讨论】:

      • 如果应用程序说 app1 在不同的选项卡中,我们如何知道它在客户端的另一个选项卡中处于活动状态并使会话处于活动状态
      • 我刚刚查看了我的 php 代码,我用像素调用了一个空的 PHP 函数。会话自动延长。这是大多数技术中的默认会话行为,一旦您登录,只要您处于活动状态(发出 http 请求),您的会话就会启动并运行。因此,通过触发静音像素,您正在发出 http 请求。所以会话将处于活动状态。所以你必须构建一个每隔几分钟(跨应用程序)触发像素的JS代码(每个应用程序中相同),并放置一个接受像素并返回空字符串(用于http状态)的java方法(在每个应用程序中)代码 200)
      • 请重新编辑你的编辑,我看了五遍了,没看懂(顺便说一句,在这个论坛里“回车”不会断行,“回车+双空格”会断行)跨度>
      • 我修改了代码。很抱歉造成混乱。我的问题得到了解答。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-19
      • 2018-07-05
      • 2016-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-21
      相关资源
      最近更新 更多