繁体   English   中英

C#在客户端上通过HTTPS维护会话

[英]C# maintaining session over HTTPS on the client

我需要登录网站并执行操作。 该网站基于REST,因此我可以轻松登录(登录信息作为查询字符串包含在URL中,因此我不需要设置凭据):

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();

我确保将cookie分配给新请求。 但由于某些原因,这似乎不起作用。 我收到一个错误,告诉我“我的会话已超时或已过期”,这是一个接一个地完成,所以它不是时间问题。

我已经使用Fiddler来检查HTTP头,但我发现这很困难,因为这是HTTPS。 (我知道我可以解密它,但似乎效果不好。)

我可以把我的URL用于这个休息服务并将它们粘贴到firefox中,一切正常,所以它一定是我做错了而不是连接的另一端。

我对HTTPS不太熟悉。 我是否需要做其他事情来维持我的会话? 我认为cookie就是它,但也许我需要在这两个请求中保留其他东西?

这是我发送第一个请求时返回的标题(除了我更改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流量后,我终于得到了它的工作。

我要回来的cookie没有列出Path变量。 因此.NET采用当前路径并将其指定为cookie上的路径,包括当前页面。 即:如果它位于http://mysite/somepath/somepage.htm ,它将设置cookie路径= / somepath / somepage.htm。 这是一个错误,因为它应该分配给“/”,这是所有Web浏览器的功能。 (希望他们解决这个问题。)

注意到这一点后,我抓住了cookie并修改了路径属性,现在一切正常。

任何有这样问题的人都会查看Fiddler。 .NET使用Windows证书存储区来解密来自程序的http流量,您需要按照以下说明操作: http//www.fiddler2.com/Fiddler/help/httpsdecryption.asp 您还需要在Fiddler的Options \\ HTTPS选项卡下打开解密。

来自MSDN

当用户在安全区域和公共区域之间来回移动时,ASP.NET生成的会话cookie(如果您启用了无cookie会话状态,则为URL)以纯文本格式移动,但是身份验证cookie永远不会通过未加密的HTTP传递连接,只要设置了安全cookie属性

基本上,如果'Secure'属性设置为'false',则可以通过HTTP和HTTPS传递cookie。

另请参阅如何在http和https之间共享asp.net会话

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM