asp.net-mvc – Cookie过期或会话超时太早
我有这样的代码,当用户被授权时运行:
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket( 1,email,DateTime.Now,DateTime.Now.AddMinutes(120),true,userData); string encTicket = FormsAuthentication.Encrypt(authTicket); HttpCookie faCookie = new HttpCookie(FormsAuthentication.FormsCookieName,encTicket); faCookie.Expires = authTicket.Expiration; Response.Cookies.Add(faCookie); 然后,我重定向到具有Authrize属性的控制器/ Action: [Authorize] public class ProductsController : Controller { 我在web.config中有以下内容: <authentication mode="Forms"> <forms loginUrl="~/Home/Unauthorized" timeout="2880" /> </authentication> <sessionState timeout="120"></sessionState> 然而,用户在几分钟的闲置状态之后抱怨会话超时或重定向主页/未授权. 可能导致这种情况,还有什么我应该检查的? 解决方法
在我进入可能的解决方案之前,有几个想法,为什么你的登录过期.首先,FormsAuthentication cookie和SessionState完全是两个不同的东西.你可以有一个或另一个,或两者或两者.结果,这两个项目的超时也没有关系.
FormsAuthentication cookie是一个加密的cookie,其中包含一些基本信息,如用户名和到期值.一旦用户通过身份验证,.NET应用程序将使用此cookie来知道用户是否被授权使用某些资源. 控制FormsAuthentication cookie的加密和解密是IIS上该Web应用程序的MachineKey. MachineKey是用于加密和解密cookie的一组密钥.默认情况下,IIS上的Web应用程序设置为AutoGenerate机器密钥.这意味着当应用程序启动时,会生成随机机器密钥.如果一个应用程序回收,你会得到一个新的机器密钥.此外,如果您在共享提供商上托管,则Web主机通常会使应用程序负载平衡,这意味着由多个服务器托管.这些服务器中的每一个将自动生成机器密钥. 如果您的Web应用程序处于负载平衡的场景,则Web场中的每台计算机都无法解密对方的加密cookie.这将显示“正在登出”.其示例是登录到Web服务器A,然后后续请求发送到Web服务器B. Web服务器B不与Web服务器A共享机器密钥,并且无法解密cookie,将用户发送回登录页面. 解决方案是在web.config中定义MachineKey部分,因此IIS的每个实例将使用相同的密钥以及应用程序池的回收,您仍然拥有相同的机器密钥. 这可能是您可以在您的web.config中放置的example machine key <system.web> <machineKey validationKey="EBC1EF196CAC273717C9C96D69D8EF314793FCE2DBB98B261D0C7677C8C7760A3483DDE3B631BC42F7B98B4B13EFB17B97A122056862A92B4E7581F15F4B3551" decryptionKey="5740E6E6A968C76C82BB465275E8C6C9CE08E698CE59A60B0BEB2AA2DA1B9AB3" validation="SHA1" decryption="AES" /> </system.web> 额外的想法是,您的web.config(2880)中的到期时间和您实际设置的到期时间(120)不匹配.你可能希望他们都匹配. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 为现有的基于MVC的网站创建REST API
- asp.net-mvc – 如何在ASP.NET Web API中获取IpAddress和Us
- asp.net-mvc – ASP.NET MVC 3 Razor Intellisense
- asp.net – 多租户,或不是多租户
- 如何在ASP.NET中阻止IP地址或IP类
- 在ASP.NET MVC中检索当前视图名称?
- asp.net – LinkBut??ton命令事件似乎没有被解雇
- 加载测试ASP.NET网站
- asp.net – 即使在IIS的web.config中使用标签后,也会出现重
- 从wsdl文件更新asp.net WebService引用?
- .Net Core微服务入门全纪录(二)——Consul-服务
- 如何使ASP.NET ListView水平重复分组项?
- 在Mono上使用F#和ASP.NET Webforms
- asp.net-mvc – 上传文件:MemoryStream与文件系
- asp.net-mvc – Telerik MVC网格大师详细级联下拉
- asp.net-mvc – 在MVC中,何时使用<%=%>和<%%&g
- asp.net-mvc – 哪里可以将商业模式转换成模型?
- asp.net-mvc – 无法加载文件或程序集Microsoft.
- asp.net – 如何在swagger中为.Net Core Web API
- asp.net实现生成缩略图及给原始图加水印的方法示