在MVC3中检查Auth之前显示的主页?

时间:2011-11-18 15:47:21

标签: .net asp.net-mvc-3 authentication asp.net-membership

我们正在使用需要访问网络服务来验证用户身份的客户MembershipProvider。在web.config中设置表单身份验证,然后转到所述提供程序。身份验证完成后,我们会设置一个自定义Cookie来存储客户名称,用户全名等等。

我们的问题是:当您再次访问该网站(在我们的开发计算机上或用完视觉工作室)时,通常一旦会话超时,您仍将看到默认主页,尽管用户实际上未经过身份验证。当您采取不同的操作时,该网站会识别出该用户无效并返回登录页面。

我们有一个所有其他控制器派生的BaseController类,我们已经将[Authorize]属性添加到重写的Execute方法中,但它似乎不起作用:

[授权] protected override void Execute(System.Web.Routing.RequestContext requestContext)

在网站返回登录页面之前显示的这个未经身份验证的页面是否有一些简单的东西?

2 个答案:

答案 0 :(得分:1)

有些事情会浮现在脑海中。 1.您确定主页出现在同一请求上的cookie已过期吗? 2.您使用的是任何输出缓存吗?

  1. 这里令人怀疑,但除非这里有一些遗漏信息,否则将其抛弃: 这假设您在会话中使用了某些内容(您在上面提到了会话) 如果通过会话你只是表示形式认证,那么这将无济于事(并请澄清)
  2. 请记住,会话超时和表单身份验证超时不一样,并且以非常不同的方式处理,因此您必须基本保持它们的同步。

    在这里查看我的代码: How can I handle forms authentication timeout exceptions in ASP.NET?

    表单身份验证超时仅在一半时间后更新。会话超时会在每次请求时更新,因此两者很容易失去同步。

答案 1 :(得分:0)

出于兴趣,如果您在Global.asax中包含类似的内容会发生什么?

protected void Session_Start(Object sender, EventArgs e)
{
        if (User.Identity.IsAuthenticated)
        {
                FormsAuthentication.SignOut();
                Response.Redirect("~/SessionEnd.aspx");
        }
}

我认为控制器方法上的[Authorize]也是吗?