2011-10-06 58 views
0

我在page_load中使用session變量時遇到問題。我有一個頁面(members.aspx),它是一個會員區域。ASP.net page_load未檢測到會話

如果用戶不是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"); 
    } 
} 

有更多的代碼,但本質上,「確定」應寫。但是,它沒有出現。儘管設置了session。如果我直接進入頁面,它會顯示出來。這只是爲了從初始登錄中重新加載成員頁面而停止它。

有什麼想法?

====================== 代碼設置會話是

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

我然後只檢查是否(Convert.ToBoolean(Session["memberLoggedIn"]) == true)我所有的頁面。說實話,它似乎並不可靠,我認爲有時候我需要了解頁面加載的順序,因爲當我在註銷頁面上銷燬會話時,某些部分仍顯示已登錄的功能! (但這是另一個故事....)

+0

你的意思是在實際的登錄過程後頁面刷新時,你沒有看到「OK」? – Timbo

+0

是的,這是正確的。如果我要登錄,然後轉到另一頁,然後回到成員主頁,它會顯示。只是沒有重新加載。 –

+0

我們來看看設置Session的代碼。 – James

回答

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"); 
      } 
    } 
0

這聽起來當您登錄您選擇是否寫入「OK」你已經處理了登錄之前一樣。就頁面管道而言,page_load在您的事件處理程序之前,您可能正在處理登錄。

您有各種選擇,其中最簡單的方法是將此特定邏輯移至Page_PreRender(如果有意義),因爲此時您的會話變量已設置。