MVC:已登录,但没有会话变量?

时间:2011-02-04 17:52:58

标签: asp.net-mvc razor session-state session-variables

我使用chrome作为调试浏览器。

当我启动我的MVC(Razor)网站时,点击停止按钮,网站继续以chrome运行,而我可以在VS中进行更改...完美。

但有时候(由于我不知道会有什么变化),当我刷新页面时,我仍然登录,但是我失去了所有的会话变量。

如果会话变量被清除,我怎么能抓住,所以我可以把我的用户带回登录页面? (我需要一个kinde global.asax page_request方法。

我确实有.. <forms loginUrl="~/Account/LogOn" timeout="2880" /> ...但我没有注销 - 只清除会话变量。

3 个答案:

答案 0 :(得分:2)

这是因为您的登录状态持久存储在客户端cookie中。会话状态持久存储在内存中的服务器上(或其他)。当您的应用重新启动时,会话被清除,但用户仍然在其计算机上拥有有效的表单身份验证令牌(假设此处为表单身份验证)。默认情况下,表单身份验证不以任何方式使用会话。

因此,在请求开始时,您可以在数据库为null时从数据库重新加载用户会话(如果可能,我认为这是首选方法)或者将用户重定向到登录屏幕,并显示“ooops”消息抱歉,我们已经失去了你的会话“(这不好!)

答案 1 :(得分:0)

如果使用内置授权功能,则只需添加[授权]属性即可。这里有一些关于使用自定义身份验证的信息:

ASP.NET MVC Authorization

答案 2 :(得分:0)

李甘恩解释得很清楚。一种解决方案是创建一个类似于Authorize的自定义过滤器属性,用于验证会话是否具有您期望的值并装饰相应的控制器/操作。