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"}}'