c# - ASP.NET 表单例份验证过期

标签 c# asp.net

有人可以向我解释 ASP.NET Forms 身份验证的工作原理吗,因为我似乎不明白它,而且我总是被注销。

目前,我有用户名、密码和“保持登录状态”复选框。根据这些值,我创建了一个票证和 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 和 ticket 设置 90 天?

最佳答案

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

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

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

滑动过期意味着每次请求都会更新 cookie。超时以分钟为单位,所以这个例子非常高:)

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

关于c# - ASP.NET 表单例份验证过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13370142/

相关文章:

c# - HttpSessionLifecycle对象序列化结构图

c# - 使用 Mobile Service.LoginAsync() 处理后退按钮

c# - 使用备用密码登录 asp.net 成员(member)

c# - ASP.NET 标识两个站点,一个数据库

asp.net - 未找到 OpenID 端点 - 依赖方超时选项

c# - 使用 'As' 而不是 (<T>) 进行转换?

c# - WCF 方法搞砸了

c# - 获取随机子集合的最佳 LINQ 查询 - Shuffle

c# - asp.net中动态生成Button

c# - 如何使用 C# 创建我的 json 字符串?