如何在使用无Cookie会话时正确处理表单身份验证票证

时间:2011-08-11 21:55:06

标签: asp.net session authentication cookieless

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

我们(我的同事和我)确定我们需要无Cookie会话,因为我们的用户需要多个会话才能以更高效的方式完成工作。

示例
Bob用户可能已经在窗口A中启动了长时间运行的进程,并且为了继续工作,Bob将打开生成新会话的窗口B.为了不打扰窗口A中发生的事情,这是必要的。每次Bob打开一个新窗口时,他都必须再次登录。

问题
我不确定这是否是一个真正的问题,因此我的理由是。我发现的问题我发现,每次Bob登录时,都会覆盖当前的表单身份验证票证(和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只是存储在其中的容器,就像键值对一样。

Additonal Info ...

表单身份验证故障单:
IsPersistent设置为true
机票版本2

表单Cookie:
Key = FormsCookieName(来自web.config标签)
价值=哈希票据

Web.Config中:

<sessionState 
    cookieless="true" 
    mode="SQLServer" 
    sqlConnectionString="..." 
    timeout="300" 
regenerateExpiredSessionId="true" />

<forms name="FormsCookieName" 
    path="../" 
    loginUrl="Login.aspx" 
    protection="All" 
    timeout="300"
    slidingExpiration="true" >
</forms>

0 个答案:

没有答案