Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 动态扩展窗体身份验证超时_C#_Asp.net_Cookies_Timeout_Forms Authentication - Fatal编程技术网

C# 动态扩展窗体身份验证超时

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

我不确定这是如何形成身份验证的。但我假设它只是基于表单身份验证超时创建cookie

所以,考虑到我正试图根据发送到服务器的一些头来增加forms auth cookie过期时间。为此,我禁用了slidingExpiration,以便自己计算过期时间

在应用程序_BeginRequest中,我正在执行:

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字段分配一些值,因为有时候它在某个地方被重写了。只有在我解密了那张票之后,我才能得到正确的日期。