我们正在使用网站的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发送到外部服务器?
感谢您的时间
答案 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对外部服务器没有任何意义。