gpt4 book ai didi

asp.net - 手动更新表单例份验证票 :

转载 作者:行者123 更新时间:2023-12-04 02:00:10 26 4
gpt4 key购买 nike

表单例份验证票过早过期的另一个问题。
我需要使用滑动 Expiration 设置为 true。我已经阅读了论坛并理解了精度损失的问题,只有在仅在到期时间的一半之后提出请求时,票证才会更新。

问题:
在我的 webconfig 我有如下:

    <authentication mode="Forms">
<forms timeout="20" name="SqlAuthCookie" protection="All" slidingExpiration="true" />
</authentication>
<sessionState timeout="20" />
<authorization>

只有在 20 分钟间隔内没有发出请求时,用户才必须注销并重定向到 login.aspx。问题是用户正在发出请求,但仍然被抛出到登录页面。这不应该发生。我想做的是为每个请求手动重置 SqlAuthCookie。

下面是我的代码。它在 context.AcquireRequestState 上调用。
    void context_AcquireRequestState(object sender, EventArgs e)
{
HttpContext ctx = HttpContext.Current;
ResetAuthCookie(ctx);
}

private void ResetAuthCookie(HttpContext ctx)
{
HttpCookie authCookie = ctx.Request.Cookies[FormsAuthentication.FormsCookieName];
if (authCookie == null)
return;

FormsAuthenticationTicket ticketOld = FormsAuthentication.Decrypt(authCookie.Value);
if (ticketOld == null)
return;

if (ticketOld.Expired)
return;

FormsAuthenticationTicket ticketNew = null;
if (FormsAuthentication.SlidingExpiration)
ticketNew = FormsAuthentication.RenewTicketIfOld(ticketOld);

if (ticketNew != ticketOld)
StoreNewCookie(ticketNew, authCookie, ctx);
}

private void StoreNewCookie(FormsAuthenticationTicket ticketNew, HttpCookie authCookie, HttpContext ctx)
{
string hash = FormsAuthentication.Encrypt(ticketNew);
if (ticketNew.IsPersistent)
authCookie.Expires = ticketNew.Expiration;

authCookie.Value = hash;
authCookie.HttpOnly = true;

ctx.Response.Cookies.Add(authCookie);
}

我的问题是:
  • 是否错误或可接受的解决方案,在每个请求上重置 cookie?
  • 为什么还是不行?新票似乎永远不会更新。
  • 是否还有其他可能的原因,因为用户的表单例份验证过早过期,我应该调查?

  • 谢谢,
    问候,

    最佳答案

    表单例份验证 cookie 仅在其过期时间过了一半后才会自我更新。

    来自微软:

    If the Web page is accessed before half of the expiration time passes, the ticket expiration time will not be reset. For example, if any Web page is accessed again at 5:04 00:00:00 PM, the cookies and ticket timeout period will not be reset.

    To prevent compromised performance, and to avoid multiple browser warnings for users that have cookie warnings turned on, the cookie is updated when more than half the specified time has elapsed.



    这可能是你的问题。如果您的客户在 9 分钟时访问您的网站,并且在 10 分钟内不再访问它,他们将超时。即使您将 session 超时设置为 20 分钟,也会发生这种情况。

    没有必要像您一样手动更新您的机票。您只需要启用滑动过期。如果“特定时间的一半”规则对您不起作用,那么您将不得不查看其他解决方案。

    关于asp.net - 手动更新表单例份验证票 :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10945715/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com