ASP.net page_load不会检测会话

时间:2011-10-06 09:23:41

标签: c# asp.net

我在session中使用page_load变量时遇到问题。我有一个页面(members.aspx),这是一个成员区域。

如果用户不在logged,则会显示一个表单,要求他们登录。表单提交了他们的详细信息,检查是否正常然后设置session变量OK。然后重新加载页面。

因此,如果用户已正确验证,则会设置Session["memberLoggedIn"] = true。 我的page_load函数看起来像这样

protected void Page_Load(object sender, EventArgs e)
{
    if (Convert.ToBoolean(Session["memberLoggedIn"]) == true) {
        Response.Write("OK");
    }
}

代码更多,但基本上应该写“OK”。但是,它没有出现。即使设置了session。如果我直接进入页面,它将显示。它只是为了从初始登录重新加载成员页面而停止它。

任何想法?!

====================== 设置会话的代码是

if (logindetails.Count > 0) {
    System.Data.DataRow details = logindetails[0];
    Session["memberLoggedIn"] = true;
}

然后,我只检查我的所有网页上是否(Convert.ToBoolean(Session["memberLoggedIn"]) == true)。说实话,它似乎并不可靠,我想有时我需要了解加载页面的顺序,因为当我在注销页面上销毁会话时,某些部分仍然显示登录的功能! (但这是另一个故事......)

2 个答案:

答案 0 :(得分:1)

试试这个

protected void Page_Load(object sender, EventArgs e)
    {
        if(!IsPostBack)
        {
            var user = HttpContext.Current.User;
            if(user.Identity.IsAuthenticated)
            {
                 Session["memberLoggedIn"] = true;
                 Print();
            }
        }
    }

    public void Print()
    {
            if (Convert.ToBoolean(Session["memberLoggedIn"]) == true)
            {
                Response.Write("ok");
            }
    }

答案 1 :(得分:0)

这听起来就像您在登录时选择是否在处理登录之前写“OK”。就页面的管道而言,page_load位于事件处理程序之前,您可能正在处理登录。

你有各种选择,其中最简单的选择就是将这个特定的逻辑移到Page_PreRender(如果有意义的话),因为此时你的会话变量已被设置。