我最近一直在使用在proc会话中使用的asp.net webforms开发一个网站,我注意到会话ID在浏览器标签之间共享。所以我想知道你会为以下情况做些什么:
问题: 在一个浏览器问题中具有不同用户的多个登录
如何在标签1中提醒用户用户已更改或如何强制tab1用户注销?
我最初的想法是通过数据库或应用程序对象保存具有会话ID的活动用户列表,但我面临的问题是在标签1中我要比较列表,当我请求HttpContext时.Current.User将更新为“user2”我怎么知道浏览器标签1最初为“user1”
感谢任何让我知道上述问题的替代方案或最佳做法的人
问候DotnetShadow
答案 0 :(得分:7)
为什么不在user2登录时发出警告?有一条消息,例如“您已经以user1身份登录,您确定要再次以其他用户身份登录吗?”
答案 1 :(得分:2)
有些人建议在网址中添加uniquifiers,并根据这些内容进行跟踪。
如果您打算这样做,您也可以让ASP.Net通过启用cookieless sessions为您执行此操作 - 然后使用该URL来包含会话ID。
答案 2 :(得分:1)
就是这样。你无能为力。用户现在已经习惯了这种行为,因为它在gmail等着名的互联网网站中是一致的......所以它对他们来说应该不是什么大问题。
答案 3 :(得分:1)
浏览器中的所有选项卡都属于同一个实例,因此所有选项卡共享Cookie和会话,您无法做很多事情。如果您想要实现这一点,我想到的唯一解决方案是为每个URL携带一个唯一的会话ID。根据该唯一ID,您可以链接特定用户。您需要自定义会话逻辑,并且必须确保您网站中的所有链接都带有此唯一ID。这可以通过很多努力来完成,但真正的问题是,它值得做吗?
答案 4 :(得分:1)
我要做的是避免此问题重定向附加一个简短的随机in-url登录标识符。
然后,我不是直接使用会话,而是在随机的in-url代码下的会话变量中存储一个强类型对象,并使用那个对象进行会话存储。如果你想保持简单,你可以使用词典。除了正常的会话超时之外,您还应该跟踪每个登录ID中的最后一次使用情况,并在会话过长时手动超时,以避免新用户保持旧登录活动。
基本上,每个ASP.NET会话对应于任意数量的登录会话。
这具有以下优点:
明显的缺点是你需要在网址中包含随机代码;而且你需要一些额外的实现。您可以使用基于iframe和/或javascript + XHR的站点隐藏额外的代码,但这样做会对站点进行更具侵略性的更改。最后,请注意,无Cookie会话不一样;虽然它们更容易打开,但它们涉及更长时间的人性友好的URL令牌,并且由于缺少正常的cookie会话令牌,与会话劫持相比也不太安全(因为突然发现任何其他程序甚至机器都发现了会话ID可以假装是该用户)。
答案 5 :(得分:0)
如何在viewstate中存储数据?这对每个窗口都是独一无二的。