2011-01-19 17 views
6

Jak ręcznie usunąć plik cookie, który został ustawiony przez subdomenę do uwierzytelniania asp.net?ręcznie usuń pliki cookie uwierzytelniania asp.net

Plik cookie ustawiono na setter.test.com;

<authentication mode="Forms"> 
    <forms domain="test.com" loginUrl="Default.aspx" protection="All" path="/" requireSSL="false" timeout="45" name=".ASPXAUTH" slidingExpiration="true" defaultUrl="Default.aspx" cookieless="UseDeviceProfile" enableCrossAppRedirects="false"/> 
</authentication> 

W mojej aplikacji na getter.test.com, to jest mój kod do logowania się (usunięcie tego ciasteczko):

public ActionResult LogOut() 
{ 
     //Manually remove the cookie created by 3rd party authentication 
      if (Request.Cookies[".ASPXAUTH"] != null) 
      { 
       HttpCookie myCookie = new HttpCookie(".ASPXAUTH"); 
       myCookie.Expires = DateTime.Now.AddDays(-1d); 
       Response.Cookies.Add(myCookie); 
      } 
} 

To nie działa.

Odpowiedz

4

Jedna mała zmiana i powinieneś być gotowy.

public ActionResult LogOut() 
{ 
    //Manually remove the cookie created by 3rd party authentication 
     if (Request.Cookies[".ASPXAUTH"] != null) 
     { 
      HttpCookie myCookie = new HttpCookie(".ASPXAUTH"); 
      myCookie.Expires = DateTime.Now.AddDays(-1d); 
      myCookie.Domain = "test.com"; 
      Response.Cookies.Add(myCookie); 
     } 
} 

Musisz mieć pewność, że domena jest ustawiona tak samo na obu.

+0

Co jeśli nie mogę twardego kodeksu domena najwyższego poziomu? –

+0

Musisz albo odczytać go z konfiguracji, albo określić w jakiś sposób. MUSISZ go mieć, możesz go pobrać z pliku cookie żądania ... –

+0

Per [RFC 6265] (http://www.rfc-editor.org/rfc/rfc6265.txt) Sekcja 4.2.2: " Zwróć uwagę, że atrybuty plików cookie nie są zwracane. W szczególności serwer nie może określić z samego nagłówka pliku cookie, kiedy ciasteczko wygaśnie, dla którego hosta jest ważny plik cookie, dla których ścieżek plik cookie jest ważny lub czy plik cookie został ustawiony z atrybuty Secure lub HttpOnly. " – HABO

3

Ponieważ można mieć tylko jeden plik cookie o tej nazwie, niezależnie od domeny, myślę, że zalecany sposób, aby to zrobić:

FormsAuthentication.SignOut(); 

Zobacz http://support.microsoft.com/kb/910443

+0

możesz mieć ten sam plik cookie nazwy dla .something.com i www.something.com. podczas wywoływania SignOut pod adresem www usuniesz jedno, ale nie drugie. true story –

+0

Czy FormsAuthentication nie dotyczy tylko bieżącej aplikacji? Jeśli więc www.something.com wskazywałoby na inny katalog główny aplikacji, otrzymalibyśmy inny login? Nigdy tego nie próbowałem. –

Powiązane problemy