我很确定我没有一个独特的问题,但我已经在谷歌和这个网站上进行了搜索,但我还没有找到我正在寻找的可靠答案。所以我想解释一下自己,看看我是否能在这个问题上得到任何帮助:
我们(我和我的同事)确定我们需要无 cookie 会话,因为我们的用户需要多个会话才能以更高效的方式完成他们的工作。
示例
Bob 用户可以在窗口 A 中启动一个长时间运行的进程,并且为了继续工作 Bob 将打开窗口 B,该窗口会产生一个新会话。这对于不干扰窗口 A 中正在发生的事情是必要的。每次 Bob 打开一个新窗口时,他都必须重新登录。
问题
我不确定这是否是一个真正的问题,因此我问的理由。我想我发现的问题是,每次 Bob 登录时,当前的 Forms Authentication Ticket(和 Cookie)都会被覆盖。现在我不明白这是怎么回事,或者为什么在 Bob 第二次登录后之前的 Session/Window 组合仍然有效。由于票证被覆盖,这是否意味着第一个会话/窗口组合应该因为票证不再有效而结束?这是关于:
Request.IsAuthenticated //Making sure the supplied ticket is valid
问题
那么既然表单身份验证票(和 Cookie)被覆盖了,这意味着什么?
- 我是否应该担心票(和 Cookie)被覆盖?
在登录期间,我是否应该截取票证(如果有)并检查其过期时间?如果它没有过期,我应该尝试更新票还是只制作一张新票?
FormsAuthentication.RenewTicketIfOld(ticket) //Just an example
如果我使用的是无 cookie 会话,我是否也应该使用无 cookie 表单身份验证?这样做的目的是使每个会话/窗口 100% 相互独立。不会再发生重写。这有什么回击吗?我什么都想不出来。
PS:我知道 cookie 只是存储在其中的内容的容器,例如键值对。
附加信息...
Forms Authentication Ticket:
IsPersistent 设置为 true
Ticket Version 2
Forms Cookie:
Key = FormsCookieName(来自 web.config 标签)
Value = Hashed Ticket
网络配置:
<sessionState
cookieless="true"
mode="SQLServer"
sqlConnectionString="..."
timeout="300"
regenerateExpiredSessionId="true" />
<forms name="FormsCookieName"
path="../"
loginUrl="Login.aspx"
protection="All"
timeout="300"
slidingExpiration="true" >
</forms>