8

有人可以向我解释 ASP.NET 表单身份验证是如何工作的,因为我似乎没有得到它,而且我一直在退出。

就目前而言,我有用户名、密码和“保持登录”复选框。根据这些值,我正在创建票证和 cookie,如下所示:

    // Create ticket
    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,email,DateTime.UtcNow,DateTime.UtcNow.AddMinutes(30),remember,String.Empty);

    // Encrypt ticket
    string cookie_contents = FormsAuthentication.Encrypt(ticket);

    // Create cookie
    HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName,cookie_contents);

    if (remember) {
        cookie.Expires = DateTime.UtcNow.AddDays(90);
    }

    cookie.Path = FormsAuthentication.FormsCookiePath;
    cookie.Secure = true;

    // Add cookie to response
    Response.Cookies.Add(cookie); 

我希望使用此代码可以登录我的网站并假设我选中“保持登录状态”以保持登录状态至少 90 天?

但是我看到的是我在首次登录后至少 30 分钟被注销(这是为票预留的时间?)。

cookie 过期和票证过期有什么区别,我如何让自己保持签名。我需要为 cookie 和票设置 90 天吗?

4

1 回答 1

24

如果可以避免,请不要直接操作 cookie。您可以使用FormsAuthentication.SetAuthCookie(username, persistent)来登录用户。这里的持久性意味着“不使用会话 cookie”。

然后,您应该在 web.config 中指定 cookie 到期时间

 <system.web>
   <authentication mode="Forms">
             <forms timeout="50000000" slidingExpiration="true"/>
   </authentication>
 </system.web>

其中滑动到期意味着将为每个请求更新 cookie。超时以分钟为单位,所以这个例子相当高:)

看看这个问题和 Scott Gu 博客的链接:Forms Authentication Cookie Expiration

于 2012-11-13T22:49:11.297 回答