我在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)
。说实话,它似乎并不可靠,我想有时我需要了解加载页面的顺序,因为当我在注销页面上销毁会话时,某些部分仍然显示登录的功能! (但这是另一个故事......)
答案 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(如果有意义的话),因为此时你的会话变量已被设置。