2013-01-22 11 views
8

Próbuję ustawić ścieżkę cookie, ale zawsze jestem recieving błąd:CookieException z CookieContainer: „path” część cookie jest nieprawidłowy

CookieException: The 'Path'='/applogin' częścią cookie jest nieprawidłowy.

kod wygląda następująco:

Cookie newCookie = new Cookie("JSESSIONID", session.SessionId, "/applogin", "domain.com"); 
newCookie.Secure = true; 
webRequest.CookieContainer.Add(new Uri(@"https://domain.com"), newCookie); 

wyjątek jest wtedy throwen na ostatniej linii ... może ktoś mi punkt w dobrym kierunku?

Odpowiedz

0

W niektórych przeglądarkach w ścieżce rozróżniana jest wielkość liter. Upewnij się, że wszystkie odniesienia do "/ applogin" dokładnie pasują do przypadku.

http://msdn.microsoft.com/en-us/library/ms178194%28v=vs.85%29.aspx

+1

Ścieżka adresu URL * zawsze * uwzględnia wielkość liter. – Gumbo

+1

Serwery internetowe systemu Windows nie uwzględniają wielkości liter, a w systemach Linux/Unix rozróżniana jest wielkość liter. Dzieje się tak, ponieważ system plików Windows nie rozróżnia wielkości liter, a system Linux/Unix rozróżnia wielkość liter. Jednak podczas wykonywania żądania cookie przeglądarka nigdy nie wysyła ścieżki cookie do serwera, porównuje ją z tym, co serwer zwraca z par nazwa/wartość. Uważam, że wszystkie przeglądarki uwzględniają wielkość liter, ale nie jestem pewien. –

+0

Ścieżki adresów URL nie rozróżniają wielkości liter bez względu na to, w jaki sposób serwer WWW decyduje się na mapowanie ścieżek adresów URL do ścieżek systemu plików. – Gumbo

8

W twoim przypadku masz dwa adresy URL: jeden jest https://domain.com a drugi jest https://domain.com/applogin. Załóżmy, że CookieContainer zawiera plik cookie dla ścieżki/applogin. Oznacza to, że jeśli spróbujesz pobrać listę plików cookie dla adresu URL https://domain.com/applogin - otrzymasz jeden plik cookie. Jeśli spróbujesz pobrać pliki cookie dla adresu URL https://domain.com - otrzymasz 0 plików cookie.

Zobaczmy teraz Twoją próbkę. Masz plik cookie dla https://domain.com/applogin i próbujesz dodać go do pliku CookieContrainer dla adresu URL https://domain.com. CookieContainer weryfikuje, że tego pliku cookie nie można użyć do określonego adresu URL, ponieważ występowały problemy z innym adresem URL. W twoim przypadku trzeba zmienić linię gdzie dodasz ciasteczko:

webRequest.CookieContainer.Add(new Uri(@"https://domain.com/applogin"), newCookie); 

Albo Chyba chcesz użyć tej cookie dla całego domena.com - to trzeba zmienić sposób tworzenia go

Cookie newCookie = new Cookie("JSESSIONID", session.SessionId, "/", "domain.com"); 
Powiązane problemy