在 HttpWebResponse C# 上访问 ASP.NET_SessionId
Accessing ASP.NET_SessionId on HttpWebResponse C#
我正在尝试从 HttpWebResponse 获取 ASP.NET_SessionId,但响应中似乎没有此类数据。
基本上,我试图在某些需要身份验证的页面上模拟一些步骤。问题不在身份验证中,我的问题是在身份验证后得到 ASP.NET_SessionId 以便我将来可以使用它 requests/steps.
从 Chrome 上的开发人员工具 > 网络,我可以在 header 上看到 ASP.NET_SessionId,但它没有出现在我的 HttpWebResponse 中。知道为什么会这样吗?
有我的代码:
var httpWebRequest = (HttpWebRequest) WebRequest.Create(url);
httpWebRequest.UserAgent = "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36"; httpWebRequest.Method = "POST";
httpWebRequest.ContentType = "application/x-www-form-urlencoded";
httpWebRequest.ContentLength = 0;
var httpWebResponse = (HttpWebResponse) httpWebRequest.GetResponse();
根据我的要求,我应该会看到 ASP.NET_SessionId header Set-Cookie,但没有成功。有什么想法吗?
我看到有人这么说
httpWebResponse.Headers["ASP.NET_SessionId"]
或
httpWebResponse.Headers["SESSION_ID"]
应该可以,但是不行,没有设置 session id header 也没有任何 Cookie。
经过多次研究,答案是here
基本上我们必须在所有请求中保持相同的 CookieContainer 对象引用。我从响应中提取了一些 Set-Cookie 并将它们添加到我的请求中,但现在我不需要做任何事情,CookieContainer 透明地管理所有这些。
响应中的 Set-Cookie 设置在您的请求 的 CookieContainer 上。这是他们发现的解决可能的安全问题的方法,所以不要浪费更多时间,只需保留对您的 CookieContainer 的引用,因为您将无法访问会话 ID(并且您不需要它)。
现在有我的代码示例。
var cookieContainer = new CookieContainer();
var httpWebRequest1 = (HttpWebRequest) WebRequest.Create(url);
httpWebRequest1.CookieContainer = cookieContainer;
// do the request and some logic
var httpWebRequest2 = (HttpWebRequest) WebRequest.Create(anotherUrl);
httpWebRequest2.CookieContainer = cookieContainer; // same cookieContainer reference
现在一切正常,希望对某人有所帮助。
我正在尝试从 HttpWebResponse 获取 ASP.NET_SessionId,但响应中似乎没有此类数据。 基本上,我试图在某些需要身份验证的页面上模拟一些步骤。问题不在身份验证中,我的问题是在身份验证后得到 ASP.NET_SessionId 以便我将来可以使用它 requests/steps.
从 Chrome 上的开发人员工具 > 网络,我可以在 header 上看到 ASP.NET_SessionId,但它没有出现在我的 HttpWebResponse 中。知道为什么会这样吗? 有我的代码:
var httpWebRequest = (HttpWebRequest) WebRequest.Create(url);
httpWebRequest.UserAgent = "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36"; httpWebRequest.Method = "POST";
httpWebRequest.ContentType = "application/x-www-form-urlencoded";
httpWebRequest.ContentLength = 0;
var httpWebResponse = (HttpWebResponse) httpWebRequest.GetResponse();
根据我的要求,我应该会看到 ASP.NET_SessionId header Set-Cookie,但没有成功。有什么想法吗?
我看到有人这么说
httpWebResponse.Headers["ASP.NET_SessionId"]
或
httpWebResponse.Headers["SESSION_ID"]
应该可以,但是不行,没有设置 session id header 也没有任何 Cookie。
经过多次研究,答案是here
基本上我们必须在所有请求中保持相同的 CookieContainer 对象引用。我从响应中提取了一些 Set-Cookie 并将它们添加到我的请求中,但现在我不需要做任何事情,CookieContainer 透明地管理所有这些。
响应中的 Set-Cookie 设置在您的请求 的 CookieContainer 上。这是他们发现的解决可能的安全问题的方法,所以不要浪费更多时间,只需保留对您的 CookieContainer 的引用,因为您将无法访问会话 ID(并且您不需要它)。
现在有我的代码示例。
var cookieContainer = new CookieContainer();
var httpWebRequest1 = (HttpWebRequest) WebRequest.Create(url);
httpWebRequest1.CookieContainer = cookieContainer;
// do the request and some logic
var httpWebRequest2 = (HttpWebRequest) WebRequest.Create(anotherUrl);
httpWebRequest2.CookieContainer = cookieContainer; // same cookieContainer reference
现在一切正常,希望对某人有所帮助。