2014-02-03 1 views
1

Я пытался выяснить, почему WebSecurity.Logout() и Session.Abandon() и не могут убить мою сессию. У меня есть приложение, размещенное на веб-сервере, который не может подписать пользователя. В отладке он успешно выйдет и возвращается на страницу входа, как и ожидалось. Я только что добавил свойство .Domain в файл cookie, чтобы при входе они могли получить доступ к остальной части субдомена. Мой печенье создается следующим образом:Комбинации WebSecurity.Logout() и Session.Abandon() не могут убить сеанс

var authTicket = new FormsAuthenticationTicket(model.UserName, false, (int)FormsAuthentication.Timeout.TotalMinutes); 
var authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(authTicket)); 
//authCookie.Domain = "mysite.org" 
authCookie.Domain = "127.0.0.1"; 
Response.AppendCookie(authCookie); 

Я нашел еще один пост на переполнение стека, рекомендованную перезапись сессию и даже когда я делаю это:

WebSecurity.Logout(); 
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); 

Любые идеи, что бы не допустить этого работать на веб-сервере, который не произошел бы при отладке? Есть ли другая форма файла cookie веб-сервера, который может сохранить этот сеанс?

ответ

2

Вам необходимо установить домен на свой файл cookie при его очистке, иначе он просто установит новый файл cookie на уровне полного домена (www.mysite.org) вместо очистки cookie mysite.org.

//clear authentication cookie 
HttpCookie cookie1 = new HttpCookie(FormsAuthentication.FormsCookieName, ""); 
cookie1.Expires = DateTime.Now.AddYears(-1); 
cookie1.Domain = "mysite.org"; 
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); 
cookie2.Domain = "mysite.org"; 
Response.Cookies.Add(cookie2); 
+0

yup получил там, в конце концов, только что пришел, чтобы обновить ответ :) – Jay

Смежные вопросы