how to copy the cookies from a HttpRequest to a HttpWebRequest

  • Thread starter Thread starter Andy Fish
  • Start date Start date
A

Andy Fish

Hi,

I have a web app that I want to make calls back into itself (preserving the
session cookies etc).

I am using a System.Net.HttpWebRequest object to make the request, but I am
having trouble getting the cookies into it.

In the current (i.e. incoming) request, the cookies are stored as
System.Web.HttpCookie objects in a System.Web.HttpCookieCollection. However,
in the new (outgoing) request, they are System.Net.Cookie objects in a
System.Net.CookieContainer.

how did we end up with two parallel but incompatible representations of the
same thing?!?

Andy
 
Andy said:
Hi,

I have a web app that I want to make calls back into itself
(preserving the session cookies etc).

I am using a System.Net.HttpWebRequest object to make the request,
but I am having trouble getting the cookies into it.

In the current (i.e. incoming) request, the cookies are stored as
System.Web.HttpCookie objects in a System.Web.HttpCookieCollection.
However, in the new (outgoing) request, they are System.Net.Cookie
objects in a System.Net.CookieContainer.

how did we end up with two parallel but incompatible representations
of the same thing?!?

The CookieContainer mananages cookies for your HTTP session(s), whereas
the CookieCollection contains really just the cookies in a particular
HTTP response. Note that CookieContainer is self-managing: If there's
an instance associated with a HttpWebRequest, it will automatically
pick up cookies contained in a HttpWebResponse.

Cheers,
 
Joerg Jooss said:
The CookieContainer mananages cookies for your HTTP session(s), whereas
the CookieCollection contains really just the cookies in a particular
HTTP response. Note that CookieContainer is self-managing: If there's
an instance associated with a HttpWebRequest, it will automatically
pick up cookies contained in a HttpWebResponse.

well thanks for the explanation. Unfortunately I still have the problem of
how to construct a new HttpWebRequest that contains the same cookies as the
current HttpRequest.

FWIW my solution was to bypass the cookie mechanisms on both sides:

newHttpWebRequest.Headers["Cookie"] = Request.Headers["Cookie"];

n.b. this will only work if newHttpWebRequest.CookieContainer is null.

Andy
 
Andy Fish wrote:

[...]
well thanks for the explanation. Unfortunately I still have the
problem of how to construct a new HttpWebRequest that contains the
same cookies as the current HttpRequest.

FWIW my solution was to bypass the cookie mechanisms on both sides:

newHttpWebRequest.Headers["Cookie"] = Request.Headers["Cookie"];

n.b. this will only work if newHttpWebRequest.CookieContainer is null.

Seems I missed the fact that you're mixing System.Net and System.Web
stuff here. Yes, doing this is a pain. If you want to work with objects
here, you have to create System.Net.Cookies from System.Web.HttpCookies.

Cheers,
 
Joerg Jooss said:
Andy Fish wrote:

[...]
well thanks for the explanation. Unfortunately I still have the
problem of how to construct a new HttpWebRequest that contains the
same cookies as the current HttpRequest.

FWIW my solution was to bypass the cookie mechanisms on both sides:

newHttpWebRequest.Headers["Cookie"] = Request.Headers["Cookie"];

n.b. this will only work if newHttpWebRequest.CookieContainer is null.

Seems I missed the fact that you're mixing System.Net and System.Web
stuff here. Yes, doing this is a pain. If you want to work with objects
here, you have to create System.Net.Cookies from System.Web.HttpCookies.

Funnily after I got that working, I ran into all sorts of problems with
trying to "loop back" from within a web page to invoke another web page on
the same server using the same cookies. Sometimes I would get the "Access
Forbidden: Too many users are connected" message but mostly IIS would just
lock up and I would have to do an iisreset to get it back.

In the end I had to abandon this approach entirely. Maybe it would work on a
server OS but not on my XP pro
 
Back
Top