asp.net – 手动更新表单认证券:
| 
                         表单认证券的另一个问题即将到期过期. 
  问题: <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只在一半到期时间过后自动更新.来自微软: 
 这可能是你的问题.如果您的客户在9分钟内访问您的网站,并且不再访问10分钟,那么他们将被超时.即使您的会话超时设置为20分钟,也会发生这种情况. 手动更新您的票,就像您所做的一样,是没有必要的.你只需要启用滑动过期.如果“特定时间的一半”规则对您无效,那么您必须查看其他解决方案. (编辑:莱芜站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!  | 
                  
- asp.net-mvc – 如何在MVC视图中构造if语句
 - asp.net-mvc-3 – MVC 3 – Html.EditorFor似乎缓存旧值$.a
 - 你如何获得asp.net控件的自动生成的name属性?
 - asp.net – 通过Web服务访问连接字符串
 - LoginView中的ASP.NET LoginStatus不会触发LoggingOut事件
 - asp.net – web部署工具2.1和web部署3.5有什么区别?哪一个
 - ASP.NET Core使用SkiaSharp实现验证码的示例代码
 - asp.net – 将Eval参数从ASPX文件传递给JavaScript函数
 - asp.net – 我如何使用AJAX来确定用户的会话是否已过期,然后
 - asp.net – 干净的方式来防止输入按钮提交表单
 
