“记住我”不在服务器上工作

时间:2012-06-06 13:49:52

标签: c# asp.net-mvc-3 session cookies

我实施"记住我"功能,我希望用户不必再次输入登录名/密码。

它似乎在本地工作,但在共享主机中,它持续约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,但仍然存在同样的问题,在本地工作,不在服务器上

我错过了什么?

3 个答案:

答案 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)

转到:ASP.NET设置并滚动到会话设置将“值”无更改为“表单”它将完成! Go to Authentication modo