2014-09-21 79 views
0

我遇到了asp.net web應用程序和Chrome的問題。當我關閉我的Chrome瀏覽器窗口時,它不會清除cookie。這意味着如果我使用表單身份驗證登錄到我的Web應用程序,然後關閉並重新打開瀏覽器窗口,則表明我仍然登錄!確保瀏覽器上的表單認證註銷關閉

我讀到,這可能是一個Chrome的錯誤,但必須有一些解決方法。

我發現this後,想從它運行下面的代碼時關閉瀏覽器窗口:

FormsAuthentication.SignOut(); 
Session.Abandon(); 

// clear authentication cookie 
HttpCookie cookie1 = new HttpCookie(FormsAuthentication.FormsCookieName, ""); 
cookie1.Expires = DateTime.Now.AddYears(-1); 
Response.Cookies.Add(cookie1); 

// clear session cookie (not necessary for your current problem but i would recommend you do it anyway) 
HttpCookie cookie2 = new HttpCookie("ASP.NET_SessionId", ""); 
cookie2.Expires = DateTime.Now.AddYears(-1); 
Response.Cookies.Add(cookie2); 

我的問題是,是否有一個瀏覽器關閉的事件處理程序,我可以在某處指定我碼? Global.aspx文件中可能爲Application_End?或者那不是它的意思?

或者有另一種方法可以解決這個問題嗎?

謝謝。

這裏是我的代碼如下所示:

private void Login_Click(Object sender, EventArgs e) 
    { 
    // Create a custom FormsAuthenticationTicket containing 
    // application specific data for the user. 

    string username  = UserNameTextBox.Text; 
    string password  = UserPassTextBox.Text; 
    bool isPersistent = false; 

    if (Membership.ValidateUser(username, password)) 
    { 
     string userData = "ApplicationSpecific data for this user."; 

     FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, 
     username, 
     DateTime.Now, 
     DateTime.Now.AddMinutes(30), 
     isPersistent, 
     userData, 
     FormsAuthentication.FormsCookiePath); 

     // Encrypt the ticket. 
     string encTicket = FormsAuthentication.Encrypt(ticket); 

     // Create the cookie. 
     Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket)); 

     // Redirect back to original URL. 
     Response.Redirect(FormsAuthentication.GetRedirectUrl(username, isPersistent)); 
    } 
    else 
    { 
     Msg.Text = "Login failed. Please check your user name and password and try again."; 
    } 
    } 

只有其checkbox.Checked的值,它是false默認更換isPersistent

編輯:

另一個惱人的事情是可能去的是什麼,從[這裏]鏈接,最多的回答說:

這也是很重要的,你使用的瀏覽器。 Chrome有能力在後臺運行,並保持會話Cookie,直到它們的超時被觸發 - 當瀏覽器關閉時我不會丟棄它們(我發現這很困難)。

2

+1

不要使用持久性cookie? – MikeSmithDev 2014-09-21 15:54:18

+0

嗯,如果有人點擊我的「記住我」複選框,我希望能夠使用它。我設置了'FormsAuthentication.GetRedirectUrl(txtboxUserName.Text,CheckBoxRememberMe.Checked)'我不應該那樣做嗎?儘管'CheckBoxRememberMe.Checked'爲'false' – Micro 2014-09-21 23:56:11

+0

如果您不希望它們在瀏覽器中保持登錄狀態,請不要使用持久cookie。並取消複選框。 – MikeSmithDev 2014-09-21 23:58:12

回答

2

沒有瀏覽器關閉處理,怎麼可能有?一旦頁面完成服務連接關閉。你不知道用戶是否從網站瀏覽,關閉瀏覽器,或讓它在那裏呆一天。您將不得不使用客戶端代碼來調用服務來處理此問題,而客戶端代碼執行此操作的可靠性不足以使其無法使用。

當您設置身份驗證Cookie時,請確保持久選項爲false。

此外,當您關閉瀏覽器時,請確保關閉所有瀏覽器窗口。如果您有多個瀏覽器窗口,它們將共享相同的緩存用於cookie,因此像會話cookie這樣的內容仍然存在,因此導致您認爲服務器在其真正的瀏覽器中保持活動狀態。

+0

查看我上面更新的代碼。我的持久性選項是錯誤的,這就是爲什麼我認爲我可以在瀏覽器關閉時運行一個偶數處理程序。 – Micro 2014-09-22 13:24:03

+1

而且我肯定會關閉所有的瀏覽器選項卡,但是使用Chrome瀏覽器,我發現它仍然可以在後臺運行?我嘗試了幾種不同的計算機,並且所有運行Chrome的用戶都會遇到同樣的情況:即使持久性選項爲「false」,關閉瀏覽器窗口也不會註銷。 – Micro 2014-09-22 13:30:38

相關問題