我有一个使用表单身份验证的asp.net网站.我在会话中保留了一些内容,如用户名,用户ID,电子邮件等.
我允许用户通过在身份验证cookie上设置较长的到期日期来保持登录网站.因此,当用户仍然进行身份验证时,会话过期是很常见的.
我遇到的问题是,有时用户的会话超时但他们仍然经过身份验证.因此,例如,我的一个用户页面(需要身份验证)会在其会话处于活动状态时说"欢迎Mike",但一旦过期,它将显示"Welcome [blank]",因为该信息不再在会话中,但他们仍然经过身份验证.
处理这个问题的最佳方法是什么?当信息不再存在时,我应该重新同步会话信息吗?或者我应该将用户信息(用户名,用户ID,电子邮件)移动到cookie中而不用担心会话超时?
我不想将会话长度设置为60分钟或更长时间.我想要的是我的用户能够登录一次而不用担心必须再次登录才能明确注销.
我在web.config中有以下内容
<sessionState mode="InProc"
timeout="2"
cookieless="UseCookies"/>
<authentication mode="Forms">
<forms
loginUrl="~/Account/LogOn"
timeout="1"
cookieless="UseCookies" />
</authentication>
Run Code Online (Sandbox Code Playgroud)
据我所知,在MVC3(或Asp.Net)中,sessionState控制用户在服务器上的会话超时,窗体身份验证超时控制何时用户将被迫再次登录网站.
这似乎并不完全正确:如果我从web.config中删除sessionState部分,则认证部分中的超时被完全忽略 - 它似乎只是在某个默认长度的时间后超时.
事实上,当验证超时时,似乎需要会话状态超时来控制.这根本没有任何意义.谁能告诉我这里缺少什么?
这与我提出的这个问题有关,但我没有深究为什么会出现这种情况.
我正在尝试为MVC站点实现一个非常基本的Asp.net表单身份验证机制.我得到的问题是我的身份验证cookie设置为在一年后过期,而我不希望它在这么长时间后过期.这是我的一些代码:
web.config中
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2" />
</authentication>
Run Code Online (Sandbox Code Playgroud)
调节器
...
FormsAuthentication.SetAuthCookie(username, false);
...
Run Code Online (Sandbox Code Playgroud)
我找到了这个答案(这个问题类似,但在我的情况下,超时永远不会发生),但这是使cookie过期或我在这里做错了什么的唯一方法吗?
当我查看cookie时,它会在一年后过期,即使它会在几分钟后过期,为什么呢?
我想要的是某种程度上用户在一段时间后退出并且我认为在forms标签中设置过期会完成这项工作吗?