2012-01-27 16 views
6

Debo navegar por un sitio determinado que conserva una identificación de sesión con idhttp de indy.Cookie de sesión con indy

uso el siguiente código para inicializar los componentes que necesito.

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; 

El problema es cuando estoy haciendo una solicitud de la cookie no se envía. ¿Qué debo hacer para enviar la cookie que contiene la identificación de la sesión? Gracias

+1

Debe especificar qué versión de Indy está utilizando, ya que la funcionalidad ha cambiado (a veces dramáticamente) entre versiones. Cómo hacer las cosas, por lo tanto, también puede cambiar drásticamente. –

+1

Recomiendo probar la versión actual de Indy de Subversion o las instantáneas diarias – mjn

Respuesta

6

Si una cookie no se envía nuevamente en solicitudes nuevas, entonces TIdCookieManager rechazó la cookie cuando se recibió, o no está haciendo coincidir la cookie aceptada con las nuevas solicitudes. ¿Puede mostrar los encabezados de respuesta Set-Cookie que están enviando cookies, y la (s) URL (s) que cree que las cookies no se están devolviendo correctamente? ¿Verificó que después de recibir una cookie, realmente termina en TIdCookieManager antes de enviar una nueva solicitud?

¿Qué versión de Indy estás usando? Antes de 2011, versiones anteriores de Indy 10 tenían un manejo de cookies que no era utilizable. Pero a principios de 2011, IdCookieManager.pas y IdCookie.pas se reescribieron por completo desde cero, y desde mayo de 2011 en adelante han funcionado correctamente y no he visto ningún nuevo informe de mal manejo de cookies.

+0

Estoy usando Delphi XE 2 ... así que cuando uso el método ihttp.Get() ¿la cookie debe enviarse automáticamente o debo configurarla manualmente? La cookie se recibe correctamente en el administrador de cookies. ¿Cómo puedo hacer eso gracias? – opc0de

+0

intenté esto ihttp.Request.CustomHeaders.Add ('Cookie:' + idcookie.CookieCollection.Cookies [0] .ClientCookie); pero sin éxito – opc0de

+0

Las cookies se manejan automáticamente. Nuevamente, ¿cómo se ve el encabezado 'Set-Cookie' del servidor que está recibiendo la cookie? Puede obtener ese valor de la propiedad 'TIdHTTP.Response.RawHeaders'. ¿Qué URL está solicitando después que no devuelva la cookie? Necesito esta información para determinar si Indy está funcionando correctamente o si esto es un error en el código de administración de cookies rediseñado. –

0

¿Hay algún problema con las cookies que no tienen una propiedad DOMAIN? El IdCookie que viene con DXE2 no analiza las cookies que NO tienen una propiedad MAX-AGE, sí tienen una propiedad EXPIRES y NO tienen una propiedad DOMAIN. Vea IdCookie.pas 675 para donde S parece tener un valor inesperado (sobrante de analizar la propiedad caduca).

Cuestiones relacionadas