[toc]
cookie和session
一、cookie
1.1 cookie的由来
http协议是无状态的,无状态的意思就是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,对于服务器来讲,每次都请求都是全新的
状态可以理解为客户端和服务端在某次会话中产生的数据,那无状态的情况下,产生的数据就不会被保存,而会话产生的数据又是需要我们保存的,经典的需求就是客户端登陆服务端后,服务端需要记住客户端是谁,而不用每次都重新登陆,这样就产生了cookie
1.2 cookie是什么
cookie是浏览器的技术,cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组
简直对
,可以理解为服务端给客户端的一个小甜点,下次客户端的浏览器访问服务器时就会自动携带这些键值对,一便服务器提取有用信息
##1.3cookie的原理
cookie的工作原理是:浏览器访问服务端,带着一个空的cookie,然后由服务器产生内容,浏览器收到内容后保存在本地,当浏览器再次访问服务器时,浏览器会自动带上cookie,这样服务器就能通过cookie的内容来判断请求者是谁了
查看cookie
cookie原理示意图
1.4 cookie规范
-
Cookie大小上限为4KB,是总数大小为4KB不是单个
-
一个服务器最多在客户端浏览器上保存20个Cookie
-
一个浏览器最多保存300个Cookie,因为一个浏览器可以访问多个服务器
-
不同浏览器之间是不共享Cookie的
1.5 cookie和http头
Cookie是通过HTTP请求和响应头在客户端和服务器端传递的:
- Cookie:请求头,客户端发送给服务器端;
- 格式:
- Cookie: a=A; b=B; c=C。即多个Cookie用分号离开;
- Set-Cookie:响应头,服务器端发送给客户端;
- 一个Cookie对象一个Set-Cookie: Set-Cookie: a=A Set-Cookie: b=B Set-Cookie: c=C
1.6 cookie的覆盖
如果服务器端发送重复的Cookie那么会覆盖原有的Cookie,例如客户端的第一个请求服务器端发送的Cookie是:Set-Cookie: a=A;第二请求服务器端发送的是:Set-Cookie: a=AA,那么客户端只留下一个Cookie,即:a=AA。
1.7 django中操作cookie
1.7.1 django设置cookie
设置cookie
#方式一
获取cookie:
request.COOKIES.get('xx')
设置cookie:
HttpResponse('xx').set_cookie('键','值')
#方式二
获取签名cookie:
request.get_signed_cookie('is_login',salt='xxx')
设置签名cookie:
ret.set_signed_cookie('is_login',True,'xxx')
设置cookie中的参数
key #cookie的键
value='' #cookie的值
max_age=None #超时时间,单位秒,经过多少秒后cookie失效,默认两周
expires=None #超时时间(IE requires expires, so set it if hasn't been already.),例如,当前时间为1月1日10时10分,设置为7就是1月8日的10时10分失效
path='/' #Cookie生效的路径,/ 表示根路径,特殊的:根路径的cookie可以被任何url的页面访问
domain=None #Cookie生效的域名
secure=False #https传输
httponly=False #只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)