2009-03-04 124 views
3

我有一個ASP.NET Web應用程序中用戶的顯式註銷按鈕的要求。我正在使用基本身份驗證(SSL)的IIS6。我可以重定向到另一個網頁,但瀏覽器保持會話活着。我搜索了一下,找到了一個辦法,通過啓用一個活動的x控件與IIS通信並終止會話。我處於不允許表單身份驗證的受限環境中,並且也不禁止活動x控件。有沒有其他人有這個要求,你是如何處理它的?註銷按鈕IIS6 ASP.NET基本身份驗證

好吧,那就是我所害怕的。我在網上看到了類似的答案,我希望有人會有辦法做到這一點。謝謝你的時間。我想我可以使用JavaScript來防止後退按鈕,如history.back()

回答

4

我用這個自己掙扎了幾天。

使用IE特定的「document.execCommand('ClearAuthenticationCache');」是不是每個人一個很好的選擇: 1)它刷新所有憑證,這意味着,例如,用戶還將得到來自他的Gmail或任何其他網站,他目前已驗證 註銷2)它只是IE瀏覽器)

我嘗試使用Session.Abandon(),然後重定向到我的Default.aspx。僅這一點是不夠的。 您需要明確告訴瀏覽器所做的請求未經授權。您可以通過使用像這樣做:

response.StatusCode = 401; 
response.Status = "401 Unauthorized"; 
response.AddHeader("WWW-Authenticate", "BASIC Realm=my application name"); 
resp.End(); 

這將導致如下:用戶點擊退出按鈕==>他會得到基本的登錄窗口。然而,如果他按下轉義鍵(登錄對話框消失)並點擊刷新,瀏覽器會自動重新發送憑證,導致用戶登錄,儘管他可能認爲他已經註銷。

解決這個問題的訣竅就是總是吐出一個獨特的'境界'。然後瀏覽器不會在上述情況下重新發送證書。我選擇吐出當前的日期和時間。

response.StatusCode = 401; 
response.Status = "401 Unauthorized"; 
string realm = "my application name";     
response.AddHeader("WWW-Authenticate", string.Format(@"BASIC Realm={0} ({1})", realm, DateTimeUtils.ConvertToUIDateTime(DateTime.Now))); 
resp.End(); 

,你需要做的另一件事是告訴瀏覽器不緩存的頁面:

Response.Cache.SetCacheability(HttpCacheability.NoCache); 
Response.Cache.SetExpires(DateTime.MinValue); 
Response.Cache.SetNoStore(); 

所有這些東西的地方它的工作原理(對我來說)在IE瀏覽器,但到現在爲止我當用戶第一次按下轉義(隱藏基本登錄對話框)然後刷新(F5)或瀏覽器後退按鈕時,仍然無法阻止firefox登錄用戶。

0

您是否嘗試過調用Session.Abandon來響應按鈕單擊?

編輯

這似乎這是一個典型的後退按鈕的問題。

對於後退按鈕,您可以做的事情很少。假設用戶剛剛在新窗口中打開當前頁面,然後單擊logOut按鈕,該頁面顯示爲註銷,但不會立即影響其他窗口的內容。

只有當他們試圖在該窗口的某個地方導航時,他們的會話就會變得明顯。

許多瀏覽器以類似(儘管不完全相同)的方式實現後退按鈕。回到上一頁不一定是用於HTML/HTTP觀點的導航。

+0

當我點擊時我仍然認證。 protected void logOut_Click(object sender,EventArgs e) Session.Clear(); Session.Abandon(); ViewState.Clear(); FormsAuthentication.SignOut(); Response.Redirect(「http://www.google.org」); } – willyconnor 2009-03-04 22:18:47

2

Session.Abandon方法破壞存儲在Session對象中的所有對象並釋放其資源。如果您不明確調用放棄方法,則當會話超時時,服務器將銷燬這些對象。

+0

當我點擊時我仍然通過驗證。 protected void logOut_Click(object sender,EventArgs e) Session.Clear(); Session.Abandon(); ViewState.Clear(); FormsAuthentication.SignOut(); Response.Redirect(「http://www.google.org」); } – willyconnor 2009-03-04 22:18:03

0

這是針對此問題的解決方案,適用於IE6及更高版本。

<asp:LinkButton ID="LinkButton1" runat="server" OnClientClick="logout();">LinkButton</asp:LinkButton> 


<script> 

    function logout() 
    { 
    document.execCommand("ClearAuthenticationCache",false); 
    } 
</script> 

從短期 憑據 http://msdn.microsoft.com/en-us/library/bb250510%28VS.85%29.aspx

網絡團隊發現這一點,請

問:傑裏B.寫道,「用戶驗證和處理他的請求後,我現在想假設這臺機器處於一個開放的環境中,任何人都可以隨心所欲地使用它,我希望每次用戶訪問Web上的特定模塊時都會提出新的挑戰。「

答:這是Internet Explorer團隊經常要求的功能,那裏的好人給了我們一種在Internet Explorer 6.0 SP1中完成它的方法。所有你需要做的是呼籲文檔的execCommand方法,ClearAuthenticationCache傳遞作爲命令的參數,如:

document.execCommand("ClearAuthenticationCache"); 

此命令會將所有證書在緩存中,這樣,如果用戶所請求的資源需要認證時,再次發生認證提示。

我把這個在我的註銷鏈接按鈕,它在IE6 SP1的工作和更高:

OnClientClick="document.execCommand('ClearAuthenticationCache');"