2011-02-04 35 views
1

我使用chrome作为调试浏览器。MVC:已登录,但没有会话变量?

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

但有时(由于我不知道有什么变化),当我刷新一个页面时,我仍然登录,但我放弃了所有会话变量。

如果会话变量被清除,我怎么能捕捉到,所以我可以把我的用户带回登录页面? (我需要一个金帝的Global.asax page_request方法

我有... <forms loginUrl="~/Account/LogOn" timeout="2880" /> ...但我不是退出。 - 只有会话瓦尔被清除

回答

2

这是因为你的登录状态中的客户端的cookie持续的会话状态在坚持在服务器上。内存(或其他)。当你的应用程序重新启动会话是C.但是用户在他们的机器上仍然有一个有效的表单认证令牌(假设表单认证)。表单身份验证默认情况下不会以任何方式使用会话。

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

0

如果使用内置的授权功能,你可以添加[授权]属性有使用这里自定义身份验证的一些信息:

ASP.NET MVC Authorization

0

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