2012-01-27 11 views
6

Muszę przeglądać pewną witrynę, która przechowuje identyfikator sesji z indem idhttp.Plik cookie sesji z indem

Korzystam z następującego kodu, aby zinicjalizować potrzebne składniki.

procedure InitSession; 
begin 
    Initalized := True; 
    try 
    ihttp := TIdHTTP.Create(nil); //the variables are declared globally 
    idCookie := TIdCookieManager.Create(nil); 
    ihttp.ConnectTimeout := 5000; 
    ihttp.AllowCookies := true; 
    ihttp.HandleRedirects := true; 
    ihttp.CookieManager := idCookie; 
    except 
    Initalized := False; 
    end; 
end; 

Problem polega na tym, że wysyłam żądanie, aby plik cookie nie został wysłany. Co muszę zrobić, aby wysłać cookie z identyfikatorem sesji? Dzięki

+1

Musisz określić wersję Indy, której używasz, ponieważ funkcjonalność zmieniła się (czasami dramatycznie) między wersjami. Jak to zrobić, rzeczy mogą się diametralnie zmienić. –

+1

Polecam wypróbować aktualną wersję Indy z Subversion lub codzienne migawki – mjn

Odpowiedz

6

Jeśli plik cookie nie jest wysyłany w nowych żądaniach, to albo TIdCookieManager odrzucił plik cookie, gdy został odebrany, albo nie pasuje do zaakceptowanego pliku cookie do nowych żądań. Czy możesz wyświetlić rzeczywiste nagłówki odpowiedzi, które wysyłają pliki cookie, a adresy URL, które uważasz, że pliki cookie nie są wysyłane poprawnie? Czy po otrzymaniu pliku cookie sprawdziłeś, czy przed wysłaniem nowego żądania kończy się ono TIdCookieManager?

Którą wersję Indy używasz? Przed 2011 r. Wcześniejsze wydania Indy 10 spowodowały awarię obsługi plików cookie, która w zasadzie nie nadawała się do użytku. Ale na początku 2011 roku, IdCookieManager.pas i IdCookie.pas zostały kompletnie przepisane od zera, a od maja 2011 roku działają poprawnie i nie widziałem żadnych nowych raportów o niewłaściwym użytkowaniu plików cookie.

+0

Używam Delphi XE 2 ... więc kiedy używam metody ihttp.Get() ciasteczko powinno zostać wysłane automatycznie lub muszę ustawić ręcznie? Plik cookie jest poprawnie odebrany w menedżerze plików cookie. Jak mogę to zrobić dzięki? – opc0de

+0

Próbowałem tego ihttp.Request.CustomHeaders.Add ('Cookie:' + idcookie.CookieCollection.Cookies [0] .ClientCookie); ale bez powodzenia – opc0de

+0

Pliki cookie są obsługiwane automatycznie. Znowu, jak wygląda serwer 'Set-Cookie'? Możesz uzyskać tę wartość z właściwości 'TIdHTTP.Response.RawHeaders'. Jakiego adresu URL żądasz później, który nie odsyła pliku cookie? Potrzebuję tych informacji, aby ustalić, czy Indy działa poprawnie, czy jest to błąd w przeprojektowanym kodzie zarządzania plikami cookie. –

0

Czy występuje problem z plikami cookie, które nie mają właściwości DOMAIN? Kod IdCookie dostarczany z DXE2 nie przetwarza plików cookie, które NIE mają właściwości MAX-AGE, mają właściwość EXPIRES i NIE mają właściwości DOMAIN. Zobacz IdCookie.pas 675, gdzie S wydaje się mieć nieoczekiwaną wartość (pozostałość po analizie właściwości expires).

Powiązane problemy