1

我很确定我没有一个独特的问题,但我已经在谷歌和这个网站上进行了搜索,但我还没有找到我正在寻找的可靠答案。所以我想解释一下自己,看看我是否能在这个问题上得到任何帮助:

我们(我和我的同事)确定我们需要无 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>
4

0 回答 0