HttpWebRequest:如何获取会话ID

时间:2009-08-25 09:27:45

标签: c# .net service

我们正在使用网站的Web服务与外部服务器进行通信。 外部服务器要求会话ID。

以下代码询问外部服务器:

HttpWebRequest webRequest = WebRequest.Create(ExtUrl) as HttpWebRequest;
webRequest.Credentials = new NetworkCredential(ExtAccountToUse, ExtPassword);
HttpWebResponse webResponse;
webRequest.Method = "POST";
webRequest.ContentType = "application/x-www-form-urlencoded";                
StreamWriter writer = new StreamWriter(webRequest.GetRequestStream());
 writer.Write(xmlOutput);
writer.Close();               
webResponse = webRequest.GetResponse() as HttpWebResponse;  

是否可以将会话ID发送到外部服务器?

感谢您的时间

3 个答案:

答案 0 :(得分:1)

这取决于您发送请求的服务器类型。例如,如果您有一个IIS托管站点,则它需要一个名为ASP.NET_SessionId的会话标识inside a cookie(或请求字符串)。如果另一方面有一个Java servlet引擎,它需要一个名为JSESSIONID的cookie(或请求路径参数jsessionid)。

所以这取决于。但是,在HttpWebRequest中设置cookie并不困难。您可以使用属性CookieContainer

CookieContainer cookies = new CookieContainer();
cookies.Add(new Cookie("ASP.NET_SessionId", sessionId));
request.CookieContainer = cookies;

您存储在cookie中的会话标识符应该具有特定格式,并且这取决于另一端的服务器类型。在ASP.NET中,默认情况下,类SessionIDManager用于生成和验证会话ID。此类很难重用,因为它需要HttpContext。但是,您可以使用Reflector检查它是如何生成会话ID的。

答案 1 :(得分:1)

如果您的意思是外部服务器需要一个现有的会话ID来标识发送给它的先前请求所创建的会话,那么您需要为所涉及的所有请求维护一个CookieContainer实例。

 CookieContainer myExternalServerCookies = new CookieContainer();

使用每个与外部服务器通信的HttpWebRequest包含以下行: -

 request.CookieContainer = myExternalServerCookies;

现在,当外部服务器设置会话cookie时,它将在后续请求中看到该cookie。

答案 2 :(得分:0)

就获取会话ID而言,您可以使用:

Session.SessionID

但我认为服务器上的会话ID对外部服务器没有任何意义。