我注意到,當我重新啓動ASP.Net應用程序時,記錄用戶的憑據被記住,他們可能會發現它們自動登錄。
只要用戶的會話變量,在登錄時設置,不會隨身攜帶。 那麼,怎樣才能「忘記」應用程序的所有會話呢?清除應用程序啓動時的所有會話
我知道我不能在Application_Start
事件中使用Session.Abandon()
。
我注意到,當我重新啓動ASP.Net應用程序時,記錄用戶的憑據被記住,他們可能會發現它們自動登錄。
只要用戶的會話變量,在登錄時設置,不會隨身攜帶。 那麼,怎樣才能「忘記」應用程序的所有會話呢?清除應用程序啓動時的所有會話
我知道我不能在Application_Start
事件中使用Session.Abandon()
。
您必須清除您的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這將導致不記住用戶的登錄狀態。
希望這會有所幫助。
重新啓動會議之後存在?怎麼可能?可能您正在使用會話狀態服務器或Sql服務器。您不能在Application_Start事件中使用Session.Abandon(),因爲當應用程序啓動時,此時不存在會話。在Application_End事件中調用Session.Clear()或Session.Abandon()方法,因此當應用程序重新啓動時,它必須清除所有會話。
當新會話啓動時使用此代碼,即將其添加到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
假設您使用表單身份驗證,它是預期的行爲:即使您的應用程序已重新啓動,用戶仍然有一個有效的FormsAuthentication cookie。
如果你真的想登錄他們出去,你只需要調用FormsAuthentication.SignOut
。
但我會質疑需要這樣做 - 爲什麼迫使用戶再次輸入他的憑據?如果您丟失了Session中存儲的狀態,則可能需要重定向到主頁或其他內容,但不需要再次登錄。
您是否使用SQL Server來存儲會話? – Aristos 2012-07-10 16:21:35
還是ASP.NET狀態服務? – bluevector 2012-07-10 16:21:51
您的會話狀態是如何配置的?請將此部分的web.config粘貼到此處。 – 2012-07-10 16:23:02