1

Delphi XE2 Update 4 および Indy コンポーネント 10.5.8.0 を Delphi によってインストールされたものとして使用します。

使用しようとしている Web サイトが、セキュリティ上の理由から、意図的に有効期限が切れた Cookie を送信しています。それは彼らの意図的なものであり、私はそれと一緒に暮らす必要があり、彼らと協力している他の開発者はそうすることができました.

私へのサーバーの応答はIdHTTP.Get()次のようになります。

Recv 8/30/2012 3:06:15 PM: HTTP/1.1 200 OK<EOL>
Date: Thu, 30 Aug 2012 19:06:35 GMT<EOL>
Server: Apache/2.2.3 (CentOS)<EOL>
X-Powered-By: PHP/5.1.6<EOL>
Set-Cookie: dati=eJxLtDKxqi62MrdSykyJLy1OLVKyLrYytVIyNjcxtISyc%2FLTM%2FNAbKAqt4CgYJfUMhDPEqinOB4omZ6aAuIbWilFgmkDkGGpeSWZaZkQ8wyNrZTSchKLMwryM%2FNK4ouKlaxrAYdvJUQ%3D; 
expires=Thu, 01-Jan-1970 00:03:00 GMT<EOL>
Content-Length: 16<EOL>
Connection: close<EOL>
Content-Type: text/plain;; charset=ISO-8859-1<EOL><EOL>
0 24.141.251.145

1970 年の有効期限に注意してください。私は現在 3 日間すべて Indy を使用しており、Cookie を作成しようとするこの試みは IdHttp および関連する CookieManager によって単純に無視されていることがわかります。

とにかくクッキーを受け取って使用する必要があると仮定すると、それをキャプチャするための適切なアプローチは何でしょうか、それとも今すぐ叫びながら逃げる必要がありますか? Delphi の経験は豊富ですが、インターネット接続の素晴らしい世界に足を踏み入れるのはこれが初めてであり、到着時に有効期限が切れるこの Cookie ビジネスには頭を悩ませています。

4

1 に答える 1

5

期限切れの Cookie の送信は、Web サーバーがクライアント側で Cookie を削除する方法です。Indy の Cookie マネージャーはそれをサポートしています。Cookie を受信すると、同じ名前/ドメイン/パスのトリオの既存の Cookie を削除し、新しい Cookie が既に期限切れになっている場合は破棄します。これはハードコーディングされた動作です。

なんらかの理由で期限切れの Cookie を保持する必要がある場合 (これは Web クライアントがそれを行うべきではないため意味がありません)、TIdCookieManager.OnNewCookieイベントを使用して Cookie の有効期限を変更する必要がありTIdCookieます。によって処理されTIdCookieManagerます。TIdCookie.Expiresプロパティを将来の日付に設定するか0.0、有効期限を無効にすることができます。とにかくこれを行う必要があります。TIdCookieManager有効期限が切れた Cookie のクリーンアップを実装しているTIdHTTPため (Cookie が HTTP 要求で送信するように要求するたびにトリガーされます)、有効期限を変更しない場合、Cookie は後でとにかく破棄されます。時間。

于 2012-08-31T00:38:13.933 に答える