我用這個自己掙扎了幾天。
使用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登錄用戶。
當我點擊時我仍然認證。 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