ASP.NET身份验证在自定义故障单上滑动到期时间

Jou*_*man 12 asp.net forms-authentication

我正在使用以下代码创建自己的身份验证票证:

string formsCookieStr = string.Empty;
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
            1,                              // version
            username,                       // user name
            DateTime.Now,                   // issue time
            DateTime.Now.AddMinutes(30),    // expires
            false,                          // Persistence
            userRoleData                    // user data
    );
formsCookieStr = FormsAuthentication.Encrypt(ticket);
HttpCookie FormsCookie = new HttpCookie(FormsAuthentication.FormsCookieName, formsCookieStr);
HttpContext.Response.Cookies.Add(FormsCookie);
Run Code Online (Sandbox Code Playgroud)

我希望到期时间是一个滑动到期 - 每次客户端发送请求时,到期时间应重置为30分钟.但是,我只是在用户第一次登录时创建票证.ASP.NET是否会自动为我延长到期时间,或者我是否需要"手动"执行某些操作来实现滑动到期?

Dar*_*rov 10

这是在formsweb.config部分配置的.滑动到期的方式是在每个请求上,ASP.NET引擎通过递增超时来重写身份验证cookie:

<authentication mode="Forms">
  <forms 
      loginUrl="~/Account/LogOn" 
      timeout="2880" 
      slidingExpiration="true" 
  />
</authentication>
Run Code Online (Sandbox Code Playgroud)

但请注意,启用滑动过期是ASP.NET安全实践中被认为是不好的做法之一.

  • "滑动过期的方式是在每个请求上,ASP.NET引擎通过递增超时来重写身份验证cookie"...不完全正确,因为如果超过一半的超时值,ASP.net只会重写身份验证票据通过.http://weblogs.asp.net/rajbk/archive/2004/10/11/241080.aspx (12认同)
  • 谢谢.但是,当不使用自定义票证时,默认情况下是默认过期,否则无论用户最后一次请求的当前状态如何,用户都会被注销?我没有观察到这种行为,并且文档说滑动过期是默认的.默认情况下我的自定义票证是否会暂停到期?(我在web.config中没有slidingExpiration设置) (2认同)