ASP.NET AJAX登录验证...取消页面加载?

时间:2011-07-06 21:57:44

标签: c# asp.net ajax lifecycle

我有以下问题:

在我的web.config中,我有以下授权设置:

<authentication mode="Forms">
    <forms loginUrl="~/LogIn" timeout="2880" name=".ASPXFORMSAUTH" defaultUrl="~/Dashboard/Dashboard.aspx"/>
</authentication>

我从之前的开发中继承的代码在登录后将用户对象存储到Session中。我打算暂时继续使用此逻辑。

现在,用户导航到该页面。 Cookie在登录时创建,用户信息存储在Session中。用户现在关闭页面的选项卡,但保持浏览器打开。用户等待导致会话到期的x时间,但不会等待cookie。用户现在尝试直接导航到他们之前的页面。表单身份验证认为他们已登录,但他们不是。因此,我登录的用户为空。

我正在尝试这样做:

protected void Page_Init(object sender, EventArgs e)
{
    if (object.Equals(DashboardSessionRepository.Instance.LoggedInUser, null))
    {
        FormsAuthentication.SignOut();
        FormsAuthentication.RedirectToLoginPage();
    }
    else
    {
        //Continue with page init
    }
}

不幸的是,这不会导致当前页面取消其生命周期。

我想知道一些事情:

  • 如何在现场正确处理此方案?
  • 如果不是正确的解决方案,这是否是可接受的解决方案?
  • 有没有办法阻止自己在其余的页面生命周期事件(页面加载,页面加载完成)期间检查LoggedInUser是否为空?我假设我可以将AutoWireEvents设置为false,但是连接我自己的生命周期似乎更加错误。

由于

1 个答案:

答案 0 :(得分:1)

  

不幸的是,这不会导致当前页面取消其生命周期。

如果您希望停止生命周期,只需将RedirectToLoginPage之后的End放置为

if (object.Equals(DashboardSessionRepository.Instance.LoggedInUser, null))
{
    FormsAuthentication.SignOut();
    FormsAuthentication.RedirectToLoginPage();
    Response.End();
    return;
}
else