2012-06-20 48 views
1

我正在使用此代碼來檢查請求是否來自頁面,如果不是則重定向到某處。檢查每個請求上的Request.ServerVariables [「HTTP_REFERER」]

string referer = Request.ServerVariables["HTTP_REFERER"]; 
      if (string.IsNullOrEmpty(referer)) 
      { 
       Response.Redirect("/UnauthorizedAccess.aspx"); 
      } 

這是工作,我不知道是否是完美的solution.However我檢查這個我page.How之一的負載情況下,我可以使它檢查每request.Should我檢查這是我的所有頁面。也是一個很好的方法。任何人都可以指出我正確的方向。任何建議都是值得歡迎的。

+0

您打算如何檢查每個請求? –

+0

@Furqan我試圖限制用戶手動編寫url並複製粘貼。 – freebird

+0

你是否在referer變量中存儲前一頁的url? –

回答

2

如果你有邏輯,你想在一堆頁面的OnLoad上運行。你應該創建一個BasePage,它來源於Page並且裏面有邏輯。然後,你想要的邏輯的所有頁面可以從BasePage而不是常規Page派生。

另一種方法可以使用Master Pages

注:閱讀有機磷農藥後補充意見。使用主頁面時要注意的一件事是主頁的Page_Load事件發生在內容頁面的Page_Load事件之後。 換句話說,生命週期是這樣的:

母版頁初始化事件

內容頁初始化事件

內容頁負載事件

母版頁負載事件

如果您的response.redirect將用戶移動到具有相同母版頁的另一頁面(以及相同的「驗證」檢查),您可能會發現自己處於無限循環:)

+0

基本上我試圖o防止用戶手動編寫url和防止複製粘貼 – freebird

+0

然後這兩種方法都可以工作。主頁基本上更多的是在所有頁面上具有相同的佈局,但它也有Page_Init和Page_Load事件。 – Blachshma

+0

我試過它在母版頁的加載事件中,但在鉻它說這個網頁有一個重定向循環。 – freebird

2

如果您有很多頁面,通用代碼,而不是一種可能的解決方案是創建自己的MyPage類作爲標準Page類的子代。在你MyPage您可以使用類似:

Page_Load(object sender, EventArgs e) 
{ 
string referer = Request.ServerVariables["HTTP_REFERER"]; 
      if (string.IsNullOrEmpty(referer)) 
      { 
       Response.Redirect("/UnauthorizedAccess.aspx"); 
      } 
base.Page_Load(sender, e); 
} 

然後在任何網頁上可以從這個自己MyPage類而不是.NET的標準一個繼承。

這樣,通用代碼就駐留在一個地方。如果有任何改變,你只能在那裏修改。

或者另一種可能性,你可以考慮使用母版頁。

+0

感謝您的幫助。如何使用母版頁來實現此目的,你能解釋一下嗎? – freebird

+0

我認爲Blachshma的評論exmplain中的鏈接相當不錯:[Master Pages](http://msdn.microsoft.com/en-us/library/wtxbf3hh.aspx) –

+0

我已經在使用母版頁,我在問什麼我應該在母版頁的加載事件中檢查它嗎? – freebird

相關問題