2012-12-23 75 views
2

頁面加載,作爲2個單詞的句子,意味着加載頁面時,意味着加載所有元素時。應該在ASP.Net的頁面加載中檢查會話嗎?

比方說,我有一個名爲Ask.aspx頁面,而這個頁面只允許誰已經登錄的用戶,所以在技術上我會寫這樣的事:

if(Session["id"]==null) 
    Response.Redirect("Login.aspx"); 

這意味着,我是測試在理論上,在頁面加載之後的會話中,我認爲它聽起來是錯誤的,現在當然我不會注意到它,它會很快,我將嘗試訪問該頁面,然後重定向到Login.aspx,但是。 ..是否正確測試會話頁面加載方法?

回答

3

Page_Load是頁面生命週期的一部分。當服務器加載頁面,而不是當客戶加載頁面...

所以這檢查會話變量中的正確的地方。它叫...

你實際上在說:在我將頁面發回客戶端之前,請檢查我是否爲此會話設置了ID屬性...如果我不這樣做 - 告訴客戶端重定向到Login.aspx頁面。 。

這是做這件事的正確方法...

我推薦你也讀了關於Server.Transfer。它與Response.Redirect之間的區別在於Server.Transfer服務器本身「重定向」到另一個頁面並將新頁面的結果輸出回客戶端(客戶端不知道)。

1

如果您試圖限制訪問特定頁面,最好使用表單身份驗證。

http://support.microsoft.com/kb/301240

這是相當容易設置和請求被傳遞到asp.net管道,然後才允許檢查憑據。在你正在做的事情中,你的頁面會在請求被拒絕之前,貫穿整個生命週期(控件是數百,綁定到數據,訪問數據庫,調用Web服務等)。根據你的情況,這可能是昂貴的,並不會很好地擴展。

編輯:您還可以掛接global.asax中的AcquireRequestState事件。這也將節省整個頁面的生命週期。