C# 动态扩展窗体身份验证超时
我不确定这是如何形成身份验证的。但我假设它只是基于表单身份验证超时创建cookie 所以,考虑到我正试图根据发送到服务器的一些头来增加forms auth cookie过期时间。为此,我禁用了slidingExpiration,以便自己计算过期时间 在应用程序_BeginRequest中,我正在执行:C# 动态扩展窗体身份验证超时,c#,asp.net,cookies,timeout,forms-authentication,C#,Asp.net,Cookies,Timeout,Forms Authentication,我不确定这是如何形成身份验证的。但我假设它只是基于表单身份验证超时创建cookie 所以,考虑到我正试图根据发送到服务器的一些头来增加forms auth cookie过期时间。为此,我禁用了slidingExpiration,以便自己计算过期时间 在应用程序_BeginRequest中,我正在执行: if (!bypassSlidingExpiration) { var authCookie = Request.Cookies[FormsAuthentication.FormsCook
if (!bypassSlidingExpiration)
{
var authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
authCookie.Expires = DateTime.Now.AddMinutes(FormsAuthentication.Timeout.TotalMinutes);
Response.Cookies.Add(authCookie);
}
但不管是否绕过SlidingExpiration,我的会话在FormsAuthentication.Timeout之后过期
我这里出了什么问题?另一个代码分支在做什么?看起来您只是在处理bypassSlidingExpiration为false的情况。如果bypassSlidingExpiration为true,则采用默认值30分钟,或web.config中指定的值或编程方式指定的值
可以考虑使用FaveSuthTimeTest.StAuthCudiIEUrNeNoRT,以绕过滑动到期。第二个参数是cookie是否应该是持久的。最好避免手动操作cookie。如果您出于某种原因必须这样做,那么这样做可能会奏效:
if (bypassSlidingExpiration)
{
var authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
authCookie.Expires = DateTime.MaxValue;
Response.Cookies.Add(authCookie);
}
不幸的是,authCookie的工作原理非常奇怪。在所有情况下,authCookie都会在01/01/0001 00:00:00过期,但我正在将其设置为应用程序请求时所需的值,并返回到浏览器正确的值。然而,我有一些情况下,我不需要延长到期时间,但在这些情况下,cookie每30个延长一次seconds@Vladimirs尝试将更新的cookie添加到响应而不是请求。查看对我的答案的编辑。我更新问题。经过一些尝试后,我在代码中找到并替换了它,但忘记了更新问题,但它仍然不能按预期工作。我能做的最好的事情就是一直给Expires字段分配一些值,因为有时候它在某个地方被重写了。只有在我解密了那张票之后,我才能得到正确的日期。