我实施"记住我"功能,我希望用户不必再次输入登录名/密码。
它似乎在本地工作,但在共享主机中,它持续约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,但仍然存在同样的问题,在本地工作,不在服务器上?
我错过了什么?
答案 0 :(得分:4)
查看web.config中的sessionstate元素。例如:
<sessionState mode="InProc" timeout="60" />
请查看以下SO问题,了解web.config中sessionstate元素与forms元素之间的差异: Differences in forms auth timeout and session timeout
accepted answer @womp表示以下内容:
每当新用户访问网站时,会话都会启动,无论如何 他们是否是匿名的。身份验证很少 做会话。
身份验证超时是身份验证的时间量 cookie适用于用户的浏览器。一旦cookie过期, 他们必须重新进行身份验证才能访问网站上的受保护资源。
因此,如果Session在Authentication cookie之前超时 - 它们是 仍然经过身份验证,但所有会话变量都会消失,并且 如果您没有受到纪律处分,可能会导致您网站出错 检查由于缺失而导致的空值和其他条件 会话。
如果身份验证在会话之前超时,则其所有会话都会超时 变量仍然存在,但它们将无法访问受保护的 资源,直到他们重新登录。
答案 1 :(得分:3)
我终于找到了解决方案,我不得不使用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
答案 2 :(得分:0)