现在的情况是:可以正常监听客户端发来的请求,当请求中的cookie就一个JSESSIONID=AA12CB32ED12ED12ED12ED12ED33ED78时,可以正确取出该cookie,但当JSESSIONID有两个,就只能取出一个了
例如抓包看到的HTTP头中的Cookie字段为:
JSESSIONID=AA12CB32ED12ED12ED12ED12ED33ED78;JSESSIONID=ED12BB32CC12AD12ED12ED12ED12ED12;利用下面代码去取:HttpListenerContext httpContext;
//此处省略HttpListenerContext部分监听代码
...
HttpListenerRequest request
request = httpContext.request;//遍历所有cookie
foreach(Cook cooks in request.cookies)
{
...
}这里调试发现 request.cookies的count只有1,也就是只能取出其中一个JSESSIONID。但是同样功能的代码用Java去写就可以读出正确的2个cookie,难道这是C#语言的BUG?求高人指点
例如抓包看到的HTTP头中的Cookie字段为:
JSESSIONID=AA12CB32ED12ED12ED12ED12ED33ED78;JSESSIONID=ED12BB32CC12AD12ED12ED12ED12ED12;利用下面代码去取:HttpListenerContext httpContext;
//此处省略HttpListenerContext部分监听代码
...
HttpListenerRequest request
request = httpContext.request;//遍历所有cookie
foreach(Cook cooks in request.cookies)
{
...
}这里调试发现 request.cookies的count只有1,也就是只能取出其中一个JSESSIONID。但是同样功能的代码用Java去写就可以读出正确的2个cookie,难道这是C#语言的BUG?求高人指点
“JSESSIONID=AA12CB32ED12ED12ED12ED12ED33ED78;USER_PASS=TEST”
这种情况下request.cookies的count=2,并且可以正确取出JSESSIONID和USER_PASS两个cookie,我现在怀疑C#的这个类不允许同样NAME的cookie出现多次,因为自己做测试也验证了这个猜测,比如像CookContainer中Add两个JSESSIONID,但是Value不同,但就只有最后Add的生效,这个是不是类的实现问题?在Java中就允许两个JSESSIONID但不同值的cookie存在,这个在.net中如何实现呢?
HttpCookie cookie = new HttpCookie["JSESSIONID"];
cookie.Value = "JSESSIONID";
Response.AppendCookie(cookie);从这个新建cookie的代码上就可以看出 如果已经存在一个叫JSESSIONID,它会覆盖掉的。
HttpCookie cookie = new HttpCookie("JSESSIONID");
cookie.Values.Add("UserName","nevermore_0923");
cookie.Values.Add("Userpwd","*****");
cookie.Values.Add("sex","NOwoman");
Response.AppendCookie(cookie);
HttpCookie cookie = Request.Cookies["JSESSIONID"];
value1 = cookies.Values["UserName"];
value2 = cookies.Values["Userpwd"];
那直接用 “,”或者什么的隔开,
到程序里在进行处理,不是更好吗?如果你现在的需求,用这种方式满足不了。
那请你详细描述的你的需求,大家一起在想解决方法
大概说一下为什么会产生两个JSESSIONID,这是通过抓包分析登录一个网站的过程看到的,在浏览器中输入地址并按回车,会打开一个网站的登录页面,在这个过程中WEBSERVER会产生一个JSESSIONID,用于标识浏览器的身份,当输入用户名、密码后点击登录按钮,WEBSERVER会临时生成一个JSESSIONID用于记录用户名、口令信息,到下次GET请求时浏览器就会带着最开始的JSESSIONID和这个临时生成的JSESSIONID一起发送到WEBSERVER,这时就会有两个JSESSIONID了我的需求就是先实现一个HTTP Proxy,然后需要在请求包中加入HTTPS的安全因素,比如X509证书,首先监听浏览器段发来的HTTP Request,进行HTTPS安全认证加工,然后将其转发到Webserver,等待Webserver的Response,然后转发回浏览器,如果只是单纯的Proxy可以采用Socket方式转发这种比较简单,但是需要加入HTTPS的相关信息用Socket就比较难实现了
HTTP规范中我没有看到cookie重名的相关解释,我比较纳闷的是Java封装的类就能完整的读出来这些重名cookie,但是C#得类就不行,
当初用C#就是因为它读取X509比较方便,看来现在不得不用Java开发了