在我的项目中,授权属性有时不工作

时间:2011-05-20 07:53:23

标签: asp.net-mvc authentication

我想了解如何解决我遇到的行为

我在使用FormsAuthentication.SetAuthCookie(user.Login, false);的代码中登录 我的控制器的每个方法都有[授权]属性

我的web.config

<authentication mode="Forms">  
  <forms loginUrl="~/Login/Index" timeout="10"/>
</authentication>

问题有时我不会进入登录页面并且Authorize属性通过,因此我的控制器方法崩溃(因为没有会话数据)。要修复它,我清除浏览器缓存并在其工作后重新启动浏览器。

我认为我的登录逻辑存在一些问题?有人可以解释它以及如何以正确的方式做到这一点。

1 个答案:

答案 0 :(得分:2)

Forms Authentication和ASP.NET MVC Authorize过滤器对ASP.NET会话状态没有任何依赖性。因此,如果控制器方法由于缺少会话数据而崩溃,那么它就与假定这种关系的代码有关。请参阅this article以了解Authorize如何使用ASP.NET身份验证。

我认为您的问题源于您假设表单身份验证与会话状态同义。但是您可以在没有身份验证的情两者都使用不同的机制并且具有不同的超时。因此,如果您在登录页面中以会话状态提供一些数据,那么您的会话可能会过期但身份验证仍然有效(因此,您将不会被带到登录页面)。一个简单的解决方案可以是同步会话和身份验证超时,但这不适用于应用程序重新启动。最好的方法是检查相关的会话数据,如果它不存在,则强制重新登录或使用经过身份验证的用户的主体/身份信息来恢复会话中的数据。我更喜欢后来的方法。