2012-01-27 12 views
6

indyのidhttpでセッションIDを保持する特定のサイトを参照する必要があります。インディを使ったセッションクッキー

私は必要なコンポーネントを初期化するために次のコードを使用します。

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; 

問題は、私がクッキーが送信されていないことをリクエストしているときです。クッキーの魔女にセッションIDが含まれていれば、それを送信するために何をする必要がありますか?ありがとう

+1

バージョン間で機能が(時に劇的に)変更されるため、使用しているインディバージョンを指定する必要があります。したがって、物事をどのように行うかは劇的に変わる可能性があります。 –

+1

Subversionや日々のスナップショットから現在のIndyバージョンを試してみることをお勧めします – mjn

答えて

6

新しいリクエストでクッキーが返されない場合、TIdCookieManagerは、クッキーが受信されたときにそのクッキーを拒否したか、受け入れたクッキーを新しいリクエストに一致させていません。クッキーを送信している実際のSet-Cookieレスポンスヘッダーと、クッキーが正しく返信されていないと思われるURLを表示できますか?クッキーを受け取った後、新しいリクエストを送信する前に実際にはTIdCookieManagerになっていることを確認しましたか?

あなたはどちらのバージョンのIndyを使用していますか? 2011年以前は、Indy 10の以前のリリースでは、基本的に使用できなかったクッキー処理が壊れていました。しかし、2011年初頭にIdCookieManager.pasIdCookie.pasが完全に書き直され、2011年5月以降は正常に動作しており、Cookieの取り扱いに関する新しい報告はありませんでした。

+0

私はDelphi XE 2を使用しています... ihttp.Get()メソッドを使用すると、クッキーは自動的に送信されるか、手動で設定する必要がありますか?クッキーは、クッキーマネージャーで正しく受信されます。どうしたらいいですか? – opc0de

+0

私はこれを試しましたihttp.Request.CustomHeaders.Add( 'Cookie:' + idcookie.CookieCollection.Cookies [0] .ClientCookie); しかし成功なし – opc0de

+0

クッキーは自動的に処理されます。繰り返しになりますが、サーバの 'Set-Cookie'ヘッダがクッキーを受信して​​いるように見えますか?その値は 'TIdHTTP.Response.RawHeaders'プロパティから取得できます。後でCookieを送り返していないURLをリクエストしていますか? Indyが正しく動作しているかどうか、またはこれが再設計されたCookie管理コードのバグであるかどうかを判断するには、この情報が必要です。 –

0

DOMAINプロパティを持たないCookieに問題はありますか? DXE2に付属するIdCookieは、MAX-AGEプロパティを持たず、EXPIRESプロパティを持ち、DOMAINプロパティを持たないクッキーを解析できません。 Sが予期せぬ値を持つように見えるのはIdCookie.pas 675を参照してください(expiresプロパティの解析から残されています)。

関連する問題