asp.net – 保持用户登录 – FormsAuthentication
发布时间:2020-12-16 06:26:37 所属栏目:asp.Net 来源:网络整理
导读:我正在努力解决这个问题.我正在使用FormAuthentication.当用户登录并且他们检查记住我时,我希望用户保持登录24小时.问题是,无论我做什么,用户都会在30分钟后自动注销.我们用户选择了记住我,我设置了一个持久性cookie,24小时后到期.我可以在浏览器选项中看到c
我正在努力解决这个问题.我正在使用FormAuthentication.当用户登录并且他们检查记住我时,我希望用户保持登录24小时.问题是,无论我做什么,用户都会在30分钟后自动注销.我们用户选择了记住我,我设置了一个持久性cookie,24小时后到期.我可以在浏览器选项中看到cookie,并且过期是正确的.如果我离开网站并回去说一个小时.用户已注销……他是我所拥有的一些代码片段.
bool IsValid = Membership.ValidateUser(LoginControl.UserName,LoginControl.Password); if (IsValid) { e.Authenticated = true; if (LoginControl.RememberMeSet) { FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(LoginControl.UserName,true,1440); // 1 day string encryptedTicket = FormsAuthentication.Encrypt(authTicket); HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName,encryptedTicket); cookie.Expires = authTicket.Expiration; HttpContext.Current.Response.Cookies.Set(cookie); Response.Redirect(FormsAuthentication.GetRedirectUrl(LoginControl.UserName,true),true); FormsAuthentication.SetAuthCookie(LoginControl.UserName,true); FormsAuthentication.RedirectFromLoginPage(LoginControl.UserName,true); } else { FormsAuthentication.SetAuthCookie(LoginControl.UserName,false); FormsAuthentication.RedirectFromLoginPage(LoginControl.UserName,false); } } 这是我的web.config <authentication mode="Forms"> <forms loginUrl="~/Account/Login.aspx" defaultUrl="/" timeout="1" cookieless="UseCookies" protection="All" slidingExpiration="true" ticketCompatibilityMode="Framework40"/> </authentication> 当用户没有检查记住我时,我设置了一个非持久性cookie,并且在1分钟不活动后用户注销.这是正常的.问题是当设置了记住cookie并且用户返回时,即使存在cookie,用户也不再登录. 解决方法
在web.config中设置以下会话状态超时.默认情况下,会话超时为20分钟.
<system.web> ... <authentication mode="Forms"> <forms loginUrl="~/Account/Login.aspx" timeout="1440" /> </authentication> ... <sessionState timeout="1440"/> ... </system.web> 解 如果用户检查记住我,请使用默认票证设置设置验证cookie.否则,请自己创建AuthenticationTicket. string username = LoginControl.UserName; if (LoginControl.RememberMeSet) { FormsAuthentication.SetAuthCookie(username,true); FormsAuthentication.RedirectFromLoginPage(username,true); } else { var authTicket = new FormsAuthenticationTicket(username,1); string encryptedTicket = FormsAuthentication.Encrypt(authTicket); var cookie = new HttpCookie(FormsAuthentication.FormsCookieName,encryptedTicket) { HttpOnly = true,Secure = FormsAuthentication.RequireSSL,Path = FormsAuthentication.FormsCookiePath,Domain = FormsAuthentication.CookieDomain,Expires = authTicket.Expiration }; Response.Cookies.Set(cookie); // ***** Here is the fix ***** // Do not use FormsAuthentication.SetAuthCookie or RedirectFromLoginPage // if you create own FormsAuthenticationTicket. Response.Redirect("~/default.aspx"); } 测试 protected void Page_Load(object sender,EventArgs e) { if (User.Identity.IsAuthenticated) { var sb = new StringBuilder(); var id = (FormsIdentity) User.Identity; var ticket = id.Ticket; sb.Append("Authenticated"); sb.Append("<br/>CookiePath: " + ticket.CookiePath); sb.Append("<br/>Expiration: " + ticket.Expiration); sb.Append("<br/>Expired: " + ticket.Expired); sb.Append("<br/>IsPersistent: " + ticket.IsPersistent); sb.Append("<br/>IssueDate: " + ticket.IssueDate); sb.Append("<br/>Name: " + ticket.Name); sb.Append("<br/>UserData: " + ticket.UserData); sb.Append("<br/>Version: " + ticket.Version); Label1.Text = sb.ToString(); } else Label1.Text = "Not Authenticated"; } 说实话,Session和Authentication Cookie超时1分钟太低了,但这取决于你. 另外,请在web.config中注明您自己创建AuthenticationTicket.调试代码的下一个人肯定会欣赏它. 问题(更新) 如果我们自己创建FormsAuthenticationTicket,我们不应该使用FormsAuthentication.RedirectFromLoginPage,它将覆盖我们的自定义过期日期并使用web.config中的日期. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – datetime.parse用西班牙语进行游行,每隔一个
- asp.net-mvc-3 – ASP.NET MVC 3,动作过滤器和Autofac依赖注
- asp.net – 在iframe中丢失会话状态,但不在弹出窗口中
- asp.net-mvc-3 – MemoryCache对象和负载均衡
- .net-4.0 – 为什么我在一个新的MVC4项目中收到编译错误?
- asp.net-mvc – Java是否与ASP.NET MVC的示例站点等效 – 特
- asp.net-mvc – Globalize.addCultureInfo不是一个函数
- [asp.net mvc 奇淫巧技] 05 - 扩展ScriptBundle,支持混淆加
- 初识ABP vNext(11):聚合根、仓储、领域服务、应用服务、
- libuv vs asp.net core 2.1中的套接字
推荐文章
站长推荐
- asp.net-mvc-3 – 实体框架将float数据类型映射为
- asp.net – 你对Windows Workflow Foundation有什
- ASP.NET HttpModule:检测会话中的第一个请求
- 如何为ASP.NET Core Angular应用程序设置默认端口
- .net – 解密字符串时偶尔出现错误数据错误:Sys
- 什么是ASP.NET-MVC 5.1中的ManageController.cs及
- 从ASP.NET Core连接到SQL Server的最佳实践?
- asp.net-mvc – MVC项目中的System.Globalizatio
- asp.net – 从DataContext缓存数据
- asp.net-core-mvc – ASP.NET MVC6 Beta8和Windo
热点阅读