我在多个应用程序上使用Spring acegi安全性进行单点登录。如果用户也在浏览器上写东西,我需要在客户端扩展会话超时。如果用户打开多个会话或浏览器,那么我需要考虑他打开的所有会话的活动会话。如果他是活跃的,那么即使他在另一个会话中处于非活动状态,我也不应该注销他。 请建议我如何在客户端跟踪和了解任何想法。
运行的应用程序app1
在两个标签说tab1
和tab2
,其中,超时是10分钟。所以我们在客户端的java脚本中实现了timeout functionalit。此代码在10分钟后给出确认框。如果用户说继续,我们通过触发活动URL来扩展会话。这适用于在单个选项卡中运行的应用程序。同样applciation app1
打开多个标签说tab1
,tab2
。这里应用程序app1在两个选项卡中打开但单个会话。我们在沃金这是在tab2
,而不是使用applciation打开应用程序中的tab1
。所以tab1的应用是不活动在tab1
给予确认框10 min.then应用和我们不回答这个确认框TAB2会让applciation注销。那么,当我们在Tab2上运行应用程序时,什么是不进行注销的解决方案。有任何想法吗?如何在其他标签中跟踪应用程序是否处于活动状态?
答案 0 :(得分:1)
这不是直截了当的答案。 (因为我认为没有解决方案)
您可以尝试在应用程序之间触发一个像素(*),并延长会话时间
让我们说你有:
app1,app2,app3
用户登录到app1和app2,他只在app1上工作。如果你在app1上发出每个http请求从他的浏览器发射一个像素到app2,他就会认为在app 2上还活着。
我认为如果您在应用程序app1,2和3之间每2分钟触发一次像素,则可以在应用程序之间保存会话。
我在PHP应用程序中完成了这个twick,它不是那么简单,但它是可行的。
* 像素 - 这是一个隐藏的http请求,它在服务器端运行脚本。可以通过ajax,img,脚本src =“”,iframe等来实现。
答案 1 :(得分:0)
最简单的方法是将登录会话与共享域相关联。假设您有app1.domain.com,app2.domain.com,app3.domain.com,但您在domain.com上进行了SSO,并且他们都共享该会话cookie。这只是在会话cookie上设置域的问题 - 我相信你可以在配置中执行此操作。无论如何,这很容易做到,所以如果这适用于你的问题,那就去吧。 (如果没有域域层次结构,可能会有一些棘手的方法,但我不确定它是什么。)
如果这不可行,您可能需要一种不同的方式来存储会话。我的第一个想法是将会话放在数据库中。通过这些,您可以同步并集中管理超时。这可能需要一些自定义代码 - 但它不应该那么多。
不确定这是否适用,但我在implementing timeout on the client side as well上写了我的想法。
答案 2 :(得分:0)
在javascript中修改代码以向服务器发送ajax请求并查找最新活动。 如果最近的活动少于10分钟,那么就没有退出。