我如何保证单次会话?

时间:2012-07-09 20:30:03

标签: java jsessionid

我需要阻止这两种情况 1.对于同一个用户帐户存在两个不同的JSESSIONID,或者 2.单个浏览器的两个选项卡引用相同的JSESSIONID。

有什么建议吗?如果检测到现有会话,则用户可以: a)退出第二次尝试 b)杀死现有的会话(一名刺客!)并开始新的会议。

首选是服务器端解决方案。也就是说,我不想依赖于用户转动cookie来强制JSESSIONID进入URL。

2 个答案:

答案 0 :(得分:1)

在每个页面中嵌入一个带有唯一标记的隐藏input字段听起来像是这样一个问题的唯一解决方案。这似乎是将一个标签与另一个标签分开的唯一方法,即使它们是完全相同的URL。

请记住,你正在做的事情似乎是非常糟糕的做法;是否有任何特殊原因阻止用户使用多个标签?

答案 1 :(得分:0)

第1部分可以使用单例模式完成,该模式根据用户SID的映射检查用户的当前sessionid。

第2部分,可以在事务性webapps中理解,您需要确保用户读取正确的信息(而不是使用一个带有旧值的选项卡和一个带有更新值的选项卡 - 场景)...它可以使用相同的sessionid映射,将其注入dom并使用javascript验证它。

EDIT。第2部分验证可以在针对client-sessionid映射的过滤器中更好地完成。并且对象的正确定义保证存在真正的唯一单例实例。