Necesito iniciar sesión en un sitio web y realizar una acción. La página web se basa RESTO así que fácilmente puedo ingresar al hacer esto (la información de acceso se incluye como una cadena de consulta en la URL, por lo que dont't necesario configurar las credenciales):C# mantener la sesión a través de HTTPS en el cliente
CookieContainer cookieJar = new CookieContainer();
HttpWebRequest firstRequest = (HttpWebRequest) WebRequest.Create(loginUrl);
firstRequest.CookieContainer = cookieJar;
firstRequest.KeepAlive = true;
firstRequest.Method = "POST";
HttpWebResponse firstResponse = (HttpWebResponse)firstRequest.GetResponse();
que funciona y me registra pulg. Recibo una cookie para mantener la sesión y se almacena en la cookieJar que se muestra arriba. Luego hago una segunda solicitud como esta:
HttpWebRequest secondRequest = (HttpWebRequest) WebRequest.Create(actionUrl);
secondRequest.Method = "POST";
secondRequest.KeepAlive = true;
secondRequest.CookieContainer = cookieJar;
WebResponse secondResponse = secondRequest.GetResponse();
Y me aseguro de asignar las cookies a la nueva solicitud. Pero por alguna razón, esto no parece funcionar. Recibo un mensaje de error que me dice "mi sesión ha expirado o ha expirado", y esto se hace uno tras otro, por lo que no es un problema de tiempo.
He usado Fiddler para examinar los encabezados HTTP, pero me resulta difícil porque es HTTPS. (Sé que puedo descifrarlo pero no parece funcionar bien.)
Puedo tomar mis URL para este servicio de descanso y pegarlas en Firefox y todo funciona bien, por lo que debe ser algo que estoy haciendo mal y no el otro extremo de la conexión.
No estoy muy familiarizado con HTTPS. ¿Debo hacer algo más para mantener mi sesión? Pensé que la cookie sería, pero tal vez hay algo más que debo mantener en las dos solicitudes.
Éstos son los encabezados devueltos cuando envío de la primera solicitud (excepto He cambiado la cookie para proteger a los inocentes!):
X-DB-Content-length=19
Keep-Alive=timeout=15, max=50
Connection=Keep-Alive
Transfer-Encoding=chunked
Content-Type=text/html; charset=WINDOWS-1252
Date=Mon, 16 Nov 2009 15:26:34 GMT
Set-Cookie:MyCookie stuff goes here
Server=Oracle-Application-Server-10g
Cualquier ayuda se agradece, me estoy quedando sin ideas.
Microsoft parece haber solucionado esto en .NET 4. – Kelly
Hola Kelly, también estoy enfrentando una sesión expirada que podría ser similar a su caso anterior, ¿podría echar un vistazo a este enlace: http://stackoverflow.com/ preguntas/22957840/crawling-session-expired Gracias – bluewonder