[英]“Remember Me” not working on server
我正在实现“记住我”功能,我希望用户不必再次输入登录名/密码。
它似乎在本地工作,但在共享主机中,它持续约15分钟然后注销。 这是代码:
控制器 :
FormsAuthentication.SetAuthCookie("username", true);
Web.config :
<authentication mode="Forms" >
<forms loginUrl="~/Account/LogOn" timeout="262974" cookieless="UseCookies" />
</authentication>
<sessionState mode="InProc" timeout="262974" cookieless="UseCookies" />
编辑
我添加了sessionState,但仍然是同样的问题,在本地而不是在服务器上工作 ?
我错过了什么?
查看web.config中的sessionstate元素。 例如:
<sessionState mode="InProc" timeout="60" />
查看以下SO问题,了解session.ate元素与web.config中表单元素之间的差异 : 表单auth超时和会话超时的差异
每当新用户访问网站时,会话就会开始,无论他们是否是匿名用户。 身份验证与Session几乎没有关系。
身份验证超时是身份验证cookie在用户浏览器上有用的时间。 一旦cookie过期,他们必须重新进行身份验证才能访问站点上受保护的资源。
因此,如果Session在Authentication cookie之前超时 - 它们仍然经过身份验证,但是它们的所有会话变量都会消失,并且如果您在检查由于缺少会话而导致的空值和其他条件时没有遵守规则,则可能会导致您的网站出错。
如果身份验证在会话之前超时,则其所有会话变量仍将存在,但在重新登录之前,它们将无法访问受保护的资源。
我终于找到了解决方案,我不得不使用StateServer
而不是InProc
以及机器密钥,这是完整的解决方案:
控制器:
FormsAuthentication.SetAuthCookie("username", true);
Web.config文件:
<authentication mode="Forms" >
<forms loginUrl="~/Account/LogOn" timeout="262974" cookieless="UseCookies" />
</authentication>
<sessionState mode="StateServer" timeout="262974" cookieless="UseCookies" />
<machineKey validationKey="5BAE63F50C69C1BBB7BFC2E696674389C307E28E9DEB60FB273B85CAD8FC3C2261FB13DF92B90A99C6EB684FDB1F6E3E92E1A42083EB77B5918126DD52245FB5" decryptionKey="11F6FE0C790413FFF3E230387168016B212216DEF727C4157CDDD0558BEAE5B7" validation="SHA1" decryption="AES" />
我与Arvixe共享托管,并且在我们找到解决方案的支持中: support.arvixe.com
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.