Cookie

转一篇关于Cookie的文章,写的确实非常好

 http://blog.csdn.net/lijing198997/article/details/9378047

 

1 什么是Cookie

Cookie是服务器发送给客户端的一段文本,客户端会在后续给服务器发送请求的时候带上这段文本。

由于Http请求是不带状态的,也就是说后一个Http请求和以前的请求是没有关联的。 如果带上Cookie那么服务器就可以通过Cookie来标示用户,进行鉴权,用户个性化设置,访问记录等

由于Cookie的内容是明文,所以不适合保存敏感信息

大多数浏览器对Cookie有一些限制,一般支持最大字节为4096字节。很多浏览器还限制了站点可以在计算机上存储的Cookie的数目。

2 Cookie的类别

Session Cookie:

  Cookie只在会话期间有效,当关闭浏览器Cookie就会被删除,创建Cookie的时候不设置Expires 超时时间就表示是Session Cookie

Persistent Cookie:

  持久化Cookie,浏览器关闭之后Cookie还会保存在本地。持久化Cookie有过期时间,由Expires 或者 Max-Age来决定

 

3  如何种植Cookie

以访问baidu为例:

Request如下

GET http://www.baidu.com/ HTTP/1.1
Host: www.baidu.com

 

Response如下:

HTTP/1.1 200 OK
Set-Cookie: BDRCVFR[feWj1Vr5u3D]=I67x6TjHwwYf0; path=/; domain=.baidu.com
Set-Cookie: BD_CK_SAM=1;path=/
Set-Cookie: BDSVRTM=66; path=/
Set-Cookie: H_PS_PSSID=4104_12657_1465_12692_12694_12716_12721_12729_12739_12742_8498; path=/; domain=.baidu.com

 

后续访问百度的页面的时候就会带上需要带的Cookie

脚本方式种植 Cookie:
JavaScript或类似的寄宿在浏览器中的脚本语言也可以设置Cookie。在JavaScript里,可以通过document.cookie对象实现。例如:
document.cookie = “key=newvalue”;  注:没试过。

下面讲一下Htpp的response中设置Cookie

对每一个Cookie,response会带上一个Set-Cookie的head:

Set-Cookie:value [ ;expires=date][ ;domain=domain][ ;path=path][ ;secure]

value为设置cokie的文本,一般以key=value的形式出现

Set-Cookie:value1

Set-Cookie:key2=value2

那么后续的请求在条件允许的情况下会带上cookie

Cookie: value1 ; key2=value2

后面中括号内的都是可选项,具体含义如下:

expires  表明cookie什么时候过期,过期的cookie将不会被发送

Set-Cookie:name=Nicholas;expires=Sat, 02 May 2009 23:38:25 GMT

Max-Age: 通过秒来指定Cookie的过期时间。

不设置expires和Max-Age的Cookie则为session cookie

 

domain选项

指示Cookie发送到哪些域中。 默认domain会射在为创建该cookie的页面所在的域名,一般设置domain是为了扩展需要发送的域的数量,比如:

Set-Cookie: H_PS_PSSID=4104_12657_1465_12692_12694_12716_12721_12729_12739_12742_8498; path=/; domain=.baidu.com

会将这个Cookie增加到了.baidu.com的域名 注:域名比较从尾部开始。设置的Domain的值必须符合当前域名的后缀并且不能是.com之类的顶级域名

 

path选项

也是控制Cookie何时发送的,path表示只有请求的资源有这样的一个路径的时候才会发送此Cookie,比如

Set-Cookie:name=Nicholas;path=/blog

path选项值会与/blog,/blogrool等等相匹配;任何以/blog开头的选项都是合法的。 path只有在domain匹配之后才会进行匹配,默认path就是当期页面的path

 

Secure选项

表明只有在安全连接的时候才会发送此cookie

 

Http-only 选项

表明这个cookie不能由Javascript的document.cookie 这个属性访问

 

Cookie的标示:

一个cookie 由name,domain,path,secure标记。  四个里面有一个不一样则是另外一个cookie

 

删除Cookie

只要setcookie的expires属性为以前的时间即可。

 

由于浏览器对Cookie的数目有限制,有时候需要设置成subcookie的格式:

name=a=b&c=d&e=f&g=h

 

 

Python处理cookie:

通过python的requests可以方便的处理cookie

1 >>> url = 'http://example.com/some/cookie/setting/url'
2 >>> r = requests.get(url)
3 
4 >>> r.cookies['example_cookie_name']
5 'example_cookie_value'

 

1 >>> url = 'http://httpbin.org/cookies'
2 >>> cookies = dict(cookies_are='working')
3 
4 >>> r = requests.get(url, cookies=cookies)
5 >>> r.text
6 '{"cookies": {"cookies_are": "working"}}'

 

posted @ 2015-03-06 12:02  zhupumpkin  阅读(362)  评论(0编辑  收藏  举报