FormsAuthentication.SignOut无法按预期工作

时间:2011-05-05 17:49:44

标签: asp.net forms-authentication

我在我的asp.net网络应用中使用了表单身份验证。当用户点击“退出”时按钮,我执行以下代码:

  FormsAuthentication.SignOut();
  FormsAuthentication.RedirectToLoginPage();

哪个有效。问题是,在退出之前,如果我复制了我当前所在的受限页面的网址,然后退出,我可以将网址粘贴回浏览器并返回限制页面,绕过登录页面。

我的网页配置如下:

<authentication mode="Forms">
    <forms name="NoiseAdvisor" loginUrl="~/Login.aspx" timeout="20" slidingExpiration="true" cookieless="AutoDetect" protection="All" requireSSL="false" defaultUrl="~/Restricted/Home.aspx"/>
</authentication>

我有什么遗失的吗?

4 个答案:

答案 0 :(得分:1)

您是否可以确认浏览器未缓存该页面,而您实际上是在看到缓存版本?按Shift-F5,查看页面是否刷新,或者是否重定向到登录页面。如果是这种情况,您可以使用缓存设置来确保用户无法返回页面。

答案 1 :(得分:0)

当您将URL“粘贴”到浏览器中时,它将为您提供页面的缓存版本(与上次访问相同的视图),除非您明确禁用了页面的客户端缓存。正如cdonner所提到的,按Shift + F5,我猜它会把你带到登录页面。

答案 2 :(得分:0)

您是否检查过以确保正确限制页面?

如:

  <location path="RestrictedPage.aspx">
    <system.web>
      <authorization>
        <deny users="?" />
        <allow users="*" />
      </authorization>
    </system.web>
  </location>

或者,您可以在限制页面上进行实际检查:

if (!(HttpContext.Current.User == null))
    if (HttpContext.Current.User.Identity.IsAuthenticated)
          // show restricted content

答案 3 :(得分:0)

这对我有用

public virtual ActionResult LogOff()
    {
        FormsAuthentication.SignOut();
        foreach (var cookie in Request.Cookies.AllKeys)
        {
            Request.Cookies.Remove(cookie);
        }
        foreach (var cookie in Response.Cookies.AllKeys)
        {
            Response.Cookies.Remove(cookie);
        }
        return RedirectToAction(MVC.Home.Index());
    }