我需要登录到一个网站和执行的操作。该网站是基于REST的,所以我可以做这个很容易登录(登录信息是作为在URL查询字符串,所以我dont't需要设置凭证):

CookieContainer cookieJar = new CookieContainer();

HttpWebRequest firstRequest = (HttpWebRequest) WebRequest.Create(loginUrl);
firstRequest.CookieContainer = cookieJar;
firstRequest.KeepAlive = true;
firstRequest.Method = "POST";
HttpWebResponse firstResponse = (HttpWebResponse)firstRequest.GetResponse();

这工作,并记录我,我得到一个cookie回到维护会话和它存储在上面显示的cookieJar。然后我做一个第二请求,诸如这样的:

HttpWebRequest secondRequest = (HttpWebRequest) WebRequest.Create(actionUrl);
secondRequest.Method = "POST";
secondRequest.KeepAlive = true;
secondRequest.CookieContainer = cookieJar;
WebResponse secondResponse = secondRequest.GetResponse();

和我确保我分配饼干到新的请求。但出于某种原因,这似乎并没有工作。我回来的错误告诉我,“我的会议已超时或过期”,而这是其他所以它不是一个时间问题之后进行一个正确的。

我使用提琴手检查HTTP标头,但我发现很困难,因为这是HTTPS。 (我知道我可以解密,但似乎并没有很好地工作。)

我可以把我的URL此休息服务,并将它们粘贴到Firefox和这一切工作正常,所以它一定有什么我做错了,而不是连接的另一端。

我不是很熟悉的HTTPS。我需要做别的事情,以保持我的会议?我认为该cookie将它,但也许还有别的东西,我需要在这两个请求维护?

下面是当我在第一个请求发送的标头中返回(除非我改变,以保护无辜的饼干!):

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

任何帮助,将不胜感激,我跑出来的想法。

有帮助吗?

解决方案

我终于得到它从我的程序解密HTTP流量后的工作。

我找回不会列出PATH变量的cookie。所以.NET需要的电流路径和分配,截至上的Cookie路径包括当前页面。即:如果是在 HTTP://mysite/somepath/somepage.htm 将设置cookie路径= / somepath / somepage.htm。这是一个错误,因为它应该被指定为“/”,这是所有网页浏览器做。 (希望他们解决这个问题。)

注意到在这之后我抓住了cookie,并修改了path属性和现在的一切工作正常。

任何人有这样的检查提琴手的问题。 .NET使用Windows证书存储,以便从程序解密的HTTP流量,你需要在这里按照指示:的 http://www.fiddler2.com/Fiddler/help/httpsdecryption.asp 。您还需要在选项\ HTTPS提琴手的标签,以打开解密。

其他提示

MSDN

  

当用户的安全和公共领域之间来回移动时,ASP.NET生成会话cookie(或URL,如果启用了cookie的会话状态)与他们在移动明文,但身份验证cookie不会传递通过未加密的HTTP连接的 只要安全cookie属性设置

因此,基本上,该cookie可以经过HTTP和HTTPS如果“安全”属性被设置为“假”。

也参见我如何能共享http和https

之间的asp.net会话
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top