C# 更新表单身份验证票据-奇怪的时间

C# 更新表单身份验证票据-奇怪的时间,c#,asp.net,formsauthentication,C#,Asp.net,Formsauthentication,我使用表单身份验证相当成功,但遇到了一个奇怪的问题。我环顾了一下网络,到目前为止还没有找到答案 我正在使用一些Javascript来确定当前会话何时会超时60秒,如果是,则弹出一个带有按钮的对话框,如果按下该按钮,将扩展当前FormsAuthentication票证 这是我用来续票的密码。我只需在票的当前到期日期上再加5分钟。但是当我输出新的到期日期时,它总是在5分钟以下;通常为4分几秒 守则: string userID = HttpContext.Current.User.Ident

我使用表单身份验证相当成功,但遇到了一个奇怪的问题。我环顾了一下网络,到目前为止还没有找到答案

我正在使用一些Javascript来确定当前会话何时会超时60秒,如果是,则弹出一个带有按钮的对话框,如果按下该按钮,将扩展当前FormsAuthentication票证

这是我用来续票的密码。我只需在票的当前到期日期上再加5分钟。但是当我输出新的到期日期时,它总是在5分钟以下;通常为4分几秒

守则:

    string userID = HttpContext.Current.User.Identity.Name;
    HttpCookie cookie = FormsAuthentication.GetAuthCookie(userID, true);

    FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value);

    DateTime NEW_EXPIRY = DateTime.Now.AddMinutes(FormsAuthentication.Timeout.Minutes);

    FormsAuthenticationTicket newTicket = new FormsAuthenticationTicket(
        ticket.Version, 
        userID, 
        DateTime.Now,
        NEW_EXPIRY,
        ticket.IsPersistent,
        ticket.UserData,
        ticket.CookiePath);

    cookie.Value = FormsAuthentication.Encrypt(newTicket);

    if (ticket.IsPersistent) cookie.Expires = newTicket.Expiration;

    cookie.Secure = FormsAuthentication.RequireSSL;

    HttpContext.Current.Response.Cookies.Add(cookie);
下面是时间差的输出示例:

时间戳现在=16/01/2016 14:03:28票证到期=16/01/2016 14:07:49(总秒数=261.0857244)


为什么不将过期时间精确地重置为14:08:28??我的头撞到墙上了…

好的,所以我仍然不知道为什么FormSidenty对象的过期值不正确。。。因此,我所做的是从续订方法返回实际的新过期值(作为日期时间),并以此为依据。看来这个值是正确的,这就是我应该用来确定实时输出值的值


这有意义吗?我不知道,但它现在起作用了

站点是在本地运行,还是在服务器上运行?我在这里遇到了麻烦-您的代码获取
FormsAuthentication.Timeout
属性是否需要可变的秒数?可能是由于您的IIS设置?我的猜测是,在运行时,
DateTime.Now
被读取,然后需要一些时间来初始化和获取超时,然后将其添加到现在过期的时间中…@stuartd-它在本地运行,但在一个服务器上执行相同的操作server@balah-我不确定是否有任何延误。过期时间戳小于它应该的值。当我输出应用于FormsAuthentication票证对象的值时,它是正确的。但是,在对其进行加密并将其添加到Cookie响应对象后,该值最终会小于其应为的值,如上面的示例所示。是的,无论如何,这都是一个不可能的结果。您使用的是什么版本的.NET?