2012-07-10 69 views
4

我注意到,當我重新啓動ASP.Net應用程序時,記錄用戶的憑據被記住,他們可能會發現它們自動登錄。
只要用戶的會話變量,在登錄時設置,不會隨身攜帶。 那麼,怎樣才能「忘記」應用程序的所有會話呢?清除應用程序啓動時的所有會話

我知道我不能在Application_Start事件中使用Session.Abandon()

+0

您是否使用SQL Server來存儲會話? – Aristos 2012-07-10 16:21:35

+0

還是ASP.NET狀態服務? – bluevector 2012-07-10 16:21:51

+0

您的會話狀態是如何配置的?請將此部分的web.config粘貼到此處。 – 2012-07-10 16:23:02

回答

0

您必須清除您的cookies是這樣的:

foreach (string key in Request.Cookies.AllKeys) 
{ 
    HttpCookie cookie = new HttpCookie(key); 
    cookie.Expires = DateTime.UtcNow.AddDays(-7); 
    Response.Cookies.Add(cookie); 
} 

EDTI: 做這一切你的cookies都將expired.and瀏覽器將嘗試刪除所有找你cookies.and這將導致不記住用戶的登錄狀態。

希望這會有所幫助。

+0

這沒有任何意義.. ..在女巫用戶會做到這一點,當什麼時候? – Aristos 2012-07-10 16:34:13

+0

這是你的句子「忘記所有會話」的一部分。我從這句話中推斷出的是你想「不記得」任何用戶。這是真的嗎?還是我的理解出了什麼問題? – 2012-07-10 16:51:40

+0

這隻會忘記當前用戶的會話 - 運行該會話的用戶。 – Aristos 2012-07-10 17:05:46

1

重新啓動會議之後存在?怎麼可能?可能您正在使用會話狀態服務器或Sql服務器。您不能在Application_Start事件中使用Session.Abandon(),因爲當應用程序啓動時,此時不存在會話。在Application_End事件中調用Session.Clear()或Session.Abandon()方法,因此當應用程序重新啓動時,它必須清除所有會話。

1

當新會話啓動時使用此代碼,即將其添加到Global.asax中

#region remove all cookies 

    string[] myCookies = Request.Cookies.AllKeys; 
    foreach (string cookie in myCookies) 
    { 
     Response.Cookies[cookie].Expires = DateTime.Now.AddDays(-1); 
    } 

    #endregion 
0

假設您使用表單身份驗證,它是預期的行爲:即使您的應用程序已重新啓動,用戶仍然有一個有效的FormsAuthentication cookie。

如果你真的想登錄他們出去,你只需要調用FormsAuthentication.SignOut

但我會質疑需要這樣做 - 爲什麼迫使用戶再次輸入他的憑據?如果您丟失了Session中存儲的狀態,則可能需要重定向到主頁或其他內容,但不需要再次登錄。

相關問題