程序员人生 网站导航

asp.net Cookie请求头以及响应头值的获取

栏目:htmlcss时间:2015-06-16 08:19:46

今天的内容还得接着昨天的文章继续讲授。上篇文章,我遇到了如何进行同名Cookie值的设置。在上1篇文章中,我设置的Cookie名字是1定的,写死了。今天再次运行项目时发现报错了,单步运行程序发现Cookie的名字居然变化了,前面的文章是把name写死了,明显不行,需要动态获得Cookie的name和value。在开始解决问题之前,我们还是先简单了解1下Cookie的基础知识。

Cookie是asp.net 保存会话数据的两种技术之1,另外一种技术是Session,在此暂不讲述,以后再补充。Cookie是客户端技术,服务器把每一个用户的数据以cookie的情势写给用户各自的阅读器。当用户使用阅读器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据了。

                                                           

Cookie是1种在客户端保持HTTP状态信息的技术,它好比商场发放的优惠卡。

Cookie是在阅读器访问WEB服务器的某个资源时,由WEB服务器在HTTP响应消息头中附带传送给阅读器的1片数据,WEB服务器传送给各个客户端阅读器的数据是可以各不

相同的。

1旦WEB阅读器保存了某个Cookie,那末它在以后每次访问该WEB服务器时,都应在HTTP要求头中将这个Cookie回传给WEB服务器

WEB服务器通过在HTTP响应消息中增加Set-Cookie响应头字段将Cookie信息发送给阅读器,阅读器则通过在HTTP要求消息中增加Cookie要求头字段将Cookie回传给WEB服务器

1个Cookie只能标识1种信息,它最少含有1个标识该信息的名称(NAME)和设置值(VALUE)。

1个WEB站点可以给1个WEB阅读器发送多个Cookie,1个WEB阅读器也能够存储多个WEB站点提供的Cookie。

                                                                 

阅读器1般只允许寄存300个Cookie,每一个站点最多寄存20个Cookie,每一个Cookie的大小限制为4KB

如果创建了1个cookie,并将他发送到阅读器,默许情况下它是1个会话级别的cookie(即存储在阅读器的内存中),用户退出阅读器以后即被删除。若希望阅读器将该cookie存储在磁盘上,则需要使用maxAge,并给出1个以秒为单位的时间。将最大时效设为0则是命令阅读器删除该cookie。

注意,删除cookie时,path必须1致,否则不会删除

                                                                     

基础的Cookie 知识大概就是这样,如果想了解具体的请参考:http://blog.sina.com.cn/s/blog_68d733750100kxvh.html

下面就接着文章开始提出的问题接着讲授。在这里,我想要获得到要求头或响应头的所有Cookie信息,包括它的name和value。我采取了下面的方法。

方法1. GetCookies()

#region 获得要求头Cookie数据 string sessionid = ""; string name = ""; CookieContainer cookieContainer = new CookieContainer(); //得到cookie CookieCollection cookies = cookieContainer.GetCookies(new Uri("http://www.baidu.com")); //遍历得到cookie if (cookies.Count>0) { foreach (Cookie cookie in cookies) { name = cookie.Name; sessionid = httpclient.Context.Cookies[cookie.Name].Value; } } #endregion
测试未能通过。报未找到主机或UrI实例无效毛病,主要就是下面这行代码的问题。

CookieCollection cookies = cookieContainer.GetCookies(new Uri("http://www.baidu.com"));
对Uri也不了解,时间紧急,没法深究Uri知识,所以被迫放弃了此种方法。

方法2  Context.Cookies

CookieCollection cookie = httpclient.Context.Cookies;//获得要求头的Cookie if (cookie.Count>0) { foreach (Cookie cook in cookie) { name = cookie.Name; sessionid = httpclient.Context.Cookies[cookie.Name].Value; } } #endregion

测试报错:Cookie不存在Name属性,可Cookie类下明明是有Name属性的,不知为什么,此方法行不通,暂时放弃。

                                 

                                                                 



方法3.GetResponseHeader()

string cook = httpclient.GetResponse().GetResponseHeader("Set―Cookie");//获得要求头的Cookie string[] args=cook.Split(','); foreach (string item in args) { name = item.Split('=')[0]; sessionid = item.Split('=')[1]; } #endregion
测试通过。

方法4.ref援用

code = GetCheckCode(ref httpclient);
测试通过。

通过上面4种方法的介绍,我们也能够看出,第4种方法最简单,如果你对利用比较了解,相信此种方法也比较好理解。经过连续几个小时的忙活,终究完成任务。

上面只是就自己实际遇到的问题进行了说明,只是对Cookie的知识进行了简单介绍,其中还有Session的和URL和Uri的区分等知识没有说明,下面的文章也会就前面的几个问题和大家共同学习,欢迎指点,共同进步。




------分隔线----------------------------
------分隔线----------------------------

最新技术推荐