2011-01-21 99 views
0

我試圖在我的網站中實現登錄/註銷功能,而無需使用ASP.NET中的登錄控件的內置功能。在某些頁面,要求用戶先登錄,我已經在Page_Load中防止在按下後退/前進按鈕時查看受限制的頁面

if (Session["cod"] == null && Session["admin"] == null) 
     { 
      Response.Redirect("You need to Login.aspx"); 
     } 
     if (Session["cod"] != null || Session["admin"] != null) 
     { 
      LinkButton1.Text = "Logout"; 
     } 

     if (Page.IsPostBack == false) 
     { 
      log_bind(); 
      grid1_bind(); 
      grid2_bind(); 
     } 

這樣寫不過,雖然我是測試這一點,我注意到,當我按下瀏覽器上的後退/前進按鈕,這些頁面無需登錄即可查看。如何防止這種情況發生?

回答

1

這與登錄控件無關,但與其他狀態一樣,頁面的緩存也是如此。

訣竅是告訴瀏覽器它不能緩存頁面。 看看這個帖子,它的解決方案: Disable browser cache for entire ASP.NET website

+0

我認爲我需要緩存禁用代碼是針對整個網站。我只希望它的一些頁面,我認爲我應該把它放入page_load – Cipher 2011-01-21 13:25:00

0

我認爲,即使你不使用ASP.NET登錄控件,你仍應該使用Principal/Identity類並驗證用戶是否已通過身份驗證。這當然是最安全的方式。

0

我不知道有任何可靠的方法來做到這一點。一旦頁面被查看,它就在用戶的計算機上。如果他們點擊後退按鈕,他們無論如何都在查看緩存版本,所以我無法想象爲什麼這會是一個問題。

只要他們無法刷新頁面以獲取最新內容,如果他們能夠查看他們已經訪問過的頁面,那又有什麼關係?

+0

我想我已經在一些網站看到,但這些都是BIGGIES,他們顯示消息「此網頁已過期」等。雖然,我不是爲做任何事情銀行類的網絡應用 – Cipher 2011-01-21 13:01:46

0

你嘗過

包裝的整體功能,如果(!的IsPostBack) {

}

+0

試過了,但它仍然有 – Cipher 2011-01-21 13:00:38

0

瀏覽器可以簡單地顯示你的頁面的緩存版本,嘗試附加調試器的頁面加載事件,並檢查是否:

  1. 它實際上是擊中服務器,當你點擊後退和前進
  2. 會話狀態中的值,無論它們是否與註銷的用戶一致。
  3. 如果會話中的值與登錄用戶一致,則必須檢查會話清除邏輯。

但最好使用asp.net控件或system.web.security.FormsAuthentication類來執行基於自定義邏輯的登錄和註銷等功能。