2012-07-06 113 views
0

我的Register頁面僅適用於已通過身份驗證的用戶,因此任何人輸入http://localhost:52874/register.aspx都將無法訪問。ASP.NET奇怪行爲

但我從登錄頁面給它一​​個鏈接,點擊時DOES使用Server.Transfer("Register.aspx", false);

現在,是我喜歡的東西去到寄存器頁的無身份驗證,這意味着它只能讀懂了從Login.aspx頁面,這是很好的。

但是,當我按下登錄頁面上的Submit按鈕(在從login.aspx傳輸之後)時,它立即將我放回login.aspx而不進行任何處理。

然後我來補充:

<location path="Register.aspx"> 
    <system.web> 
     <authorization> 
     <allow users="?" /> 
     </authorization> 
    </system.web> 
    </location> 

爲了web配置,使其能夠工作,這意味着現在的URL訪問。那麼,爲什麼這個行爲,爲什麼讓我去使用Server.Tranfer但還是不讓我處理按鈕點擊?

回答

0

這是因爲Server.Transfer將當前請求的處理轉移到不同的頁面。檢查後會發生這種情況,看看您是否有權訪問請求的頁面。即當使用Server.Transfer時,請求是針對您有權訪問的頁面的,但您通過將該頁面的處理傳遞給您無權訪問的頁面來規避安全性。

退房Server.Transfer Vs. Response.Redirect

+0

因此,它決定我可以訪問Login.aspx,然後當我做一個轉移到Register.aspx沒有更多的檢查......當我點擊提交它醒來,並意識到我不應該在那裏,讓我回來登錄? – sprocket12 2012-07-06 10:34:44

+0

@MuhammadA Precisely :-) – magritte 2012-07-06 10:35:24

0

http://www.4guysfromrolla.com/articles/120705-1.aspx - 看看這篇文章對會員供應商。它可能有所幫助:)

如果您只有在登錄後才允許用戶訪問該頁面,則可能需要拒絕user =「?」這將拒絕匿名用戶訪問該頁面。

+0

我希望用戶只能從Login.aspx上的鏈接訪問register.aspx,它的工作原理,但在Register.aspx提交不起作用......我不知道爲什麼。 – sprocket12 2012-07-06 10:32:18

+0

您是否嘗試過這將允許任何人訪問該頁面 – thatuxguy 2012-07-06 10:34:46

+0

查看本頁的第2步.. http://www.asp.net/web-forms/tutorials/安全/會員/基於用戶的授權-CS – thatuxguy 2012-07-06 10:36:42

1

如果你看瀏覽器地址欄,當你做一個Server.Transfer的URL沒有改變 - 這是因爲它停止當前頁面的處理,並開始處理沒有瀏覽器意識到這一點新的。因此,它會繞過身份驗證,直到您回發,即單擊按鈕時它將您發送回登錄。

你應該做的是一個Response.Redirect,它將改變URL並且認證將正確地發生。

0

MSDN

ASP.NET不驗證當前用戶被授權查看 通過轉印法提供的資源。雖然在調用原始的 資源處理程序之前,ASP.NET 授權和驗證邏輯運行,但ASP.NET直接調用由Transfer方法指示的處理程序 ,並且不會重新運行新資源的驗證和 授權邏輯。如果您的應用程序的 安全策略要求客戶端擁有適當的授權,以 訪問的資源,應用程序應強制再次授權或 提供自定義訪問控制機制。

因此,Server.Transfer("Register.aspx", false);在設計中並未在您的方案中進行身份驗證。

我想任何人都應該能夠看到註冊頁面 - 用戶應該能夠通過URL到達那裏。因此,使用web.config文件確保註冊頁面可用於未經身份驗證的用戶,從而更改您的大綱。