内容简介:http://stackoverflow.com/questions/8989749/timeout-not-working-in-asp-net-mvc-formsauthentication
我正在使用FormsAuthentication,我在设置TimeOut值时遇到问题.
我看过一些与此有关的其他帖子,但它们似乎并不完全符合我的问题,或者解决方案没有帮助.
我的web.config具有以下内容:
<authentication mode="Forms"> <forms loginUrl="~/Account/LogOn" timeout="1" cookieless="UseCookies" /> </authentication>
我把一个AuthorizeAttribute放在我想要保护的控制器上.
我可以查看.ASPXAUTH cookie(使用FireCookies),我可以看到它设置为在登录后1分钟内到期.
如果我调试我的代码,我可以看到FormsAuthentication.Timeout = 1.
不过我的门票在1分钟内似乎没有超时. 1分钟不活动后,我仍然可以使用AuthorizeAttribute浏览到控制器.
实际上我实际上可以使用FireCookie删除.ASPXAUTH cookie,我仍然可以使用AuthorizeAttribute浏览到控制器.
在很长一段时间后,很奇怪的(抱歉没有一个确切的时间 – 我出去吃午饭了)TimeOut发生了,我被重定向
到登录屏幕.
有任何想法吗?
我也有同样的问题.其实呢,是因为我无法从javascript读取表单认证cookie,这是一段时间未定义的.我只想知道我是否通过javascript进行身份验证.
后来我发现这张票已经过期,但我没有注销(也是,所以我也想解决)!我看到你的问题没有得到回答,所以当我解决问题半天的时候,我保持开放.以下是我想出的,似乎是工作.
我的答案是基于这个答案. http://stackoverflow.com/a/454639/511438 由用户ScottS
这是在我的ASP.NET MVC 3项目.
这是我的登录代码.未显示,自定义用户认证逻辑之前.这只是设置初始票.
public class FormsAuthenticationService:IFormsAuthentication
public void SignIn(string userName, bool createPersistentCookie, string role) { FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket( 1, // version userName, // user name DateTime.Now, // created DateTime.Now.Add(FormsAuthentication.Timeout), // expires false, // rememberMe? role // can be used to store roles ); string encryptedTicket = FormsAuthentication.Encrypt(authTicket); HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); HttpContext.Current.Response.Cookies.Add(authCookie); }
在同一个类中,但是从global.asax访问的静态方法
//-- this is based on http://stackoverflow.com/questions/454616/asp-net-cookies-authentication-and-session-timeouts internal static FormsAuthenticationTicket RefreshLoginCookie(bool retainCurrentExpiry) { HttpCookie authCookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName]; if (authCookie == null || authCookie.Value == null) return null; FormsAuthenticationTicket oldTicket = FormsAuthentication.Decrypt(authCookie.Value); DateTime expiryDate = (retainCurrentExpiry ? oldTicket.Expiration : DateTime.Now.Add(FormsAuthentication.Timeout)); HttpContext.Current.Response.Cookies.Remove(FormsAuthentication.FormsCookieName); var newTicket = new FormsAuthenticationTicket(oldTicket.Version, oldTicket.Name, oldTicket.IssueDate, expiryDate, oldTicket.IsPersistent, oldTicket.UserData, oldTicket.CookiePath); HttpCookie newAuthCookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(newTicket)); HttpContext.Current.Response.Cookies.Add(newAuthCookie); return newTicket; }
Global.asax中
我的自定义是ajax请求不刷新表单身份验证票证.所以如果你坐在那里的超时时间,一个ajax请求将会注销你.更改,如果你想要ajax请求保持机票活着(解决我的JavaScript cookie问题,而不是你的注销不活动问题).
*(提示,如果您注销,然后登录,但再次回到登录页面,第一次登录也没有在querystring中指定一个returnUrl). *
protected virtual void Application_AuthenticateRequest(Object sender, EventArgs e) { HttpCookie authCookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName]; if (authCookie == null || authCookie.Value == "") { return; } bool isAjax = new HttpRequestWrapper(System.Web.HttpContext.Current.Request).IsAjaxRequest(); FormsAuthenticationTicket authTicket; try { //-- THIS IS WHAT YOU WANT authTicket = FormsAuthenticationService.RefreshLoginCookie(isAjax); } catch { return; } string[] roles = authTicket.UserData.Split(';'); if (Context.User != null) Context.User = new GenericPrincipal(Context.User.Identity, roles); }
Web.config文件
这里是我设置会话超时和机票超时的部分
<configuration> <system.web> <sessionState mode="InProc" timeout="60" /> <authentication mode="Forms"> <forms loginUrl="~/Account/Login" timeout="60" name="ProviderMvcSession" cookieless="UseCookies" /> </authentication>
http://stackoverflow.com/questions/8989749/timeout-not-working-in-asp-net-mvc-formsauthentication
以上所述就是小编给大家介绍的《asp.net-mvc-3 – 超时在ASP.Net MVC FormsAuthentication中不起作用》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- redigo设置超时时间
- 深入理解 JDBC 的超时
- [golang]一定要设置超时
- 超时与重试机制(一)
- MongoDB 查询超时异常 SocketTimeoutException
- Go并发调用的超时处理
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Intel系列微处理器体系结构、编程与接口
布雷, / 机械工业出版社 / 2005-4 / 99.00元
本书是讲述Intel微处理器的国外经典教材,已经多次再版,经过长期教学使用,吐故纳新,不断完善,内容丰富,体系完整。第6版中包含了微处理器领域的最新技术发展,涵盖了Pentium 4的内容。本书结合实例讲解工作原理,并给出小结和习题,既适合教学使用,也适合自学。书中许多实例都可以作为开发类似应用的模板和原型,极具实用价值。附录还给出了备查资料,供设计和调试汇编语言时使用。本书可作为高等院校计算机、......一起来看看 《Intel系列微处理器体系结构、编程与接口》 这本书的介绍吧!