day059 cookie与session缓存浏览器状态
本节内容:
1、会话跟踪技术
2、cookie概述
3、session介绍
一、会话跟踪技术
1、什么是会话跟踪技术
可以理解为客户端与服务端之间的一次会晤,这一次中可能包含多次请求和响应。
例如:
你给10086打个电话,你就是客户端,而10086服务人员就是服务器了。
在这一次会话中,你会向10086发出多个请求,那么这多个请求都在一个会话中。
1、在一个会话的多个请求中共享数据,这就是会话跟踪技术。
2、会话路径技术使用Cookie或session完成
我们知道HTTP协议是无状态协议,也就是说每个请求都是独立的!
无法记录前一次请求的状态。
但HTTP协议中可以使用Cookie来完成会话跟踪!
在Web开发中,使用session来完成会话跟踪,session底层依赖Cookie技术。
Cookie翻译成中文是小甜点,小饼干的意思。
在HTTP中它表示服务器送给客户端浏览器的小甜点。
其实Cookie是key-value结构,类似于一个python中的字典。
随着服务器端的响应发送给客户端浏览器。然后客户端浏览器会把Cookie保存起来,
当下一次再访问服务器时把Cookie再发送给服务器。
Cookie是由服务器创建,然后通过响应发送给客户端的一个键值对。
客户端会保存Cookie,并会标注出Cookie的来源(哪个服务器的Cookie)。
当客户端向服务器发出请求时会把所有这个服务器Cookie包含在请求中发送给服务器,
这样服务器就可以识别客户端了!
2、Cookie规范
1、Cookie大小上限为4KB;
2、一个服务器最多在客户端浏览器上保存20个Cookie;
3、一个浏览器最多保存300个Cookie;
上面的数据只是HTTP的Cookie规范,但在浏览器大战的今天,一些浏览器为了打败对手,
为了展现自己的能力起见,可能对Cookie规范“扩展”了一些,
例如每个Cookie的大小为8KB,最多可保存500个Cookie等!
但也不会出现把你硬盘占满的可能!
1、不同浏览器之间是不共享Cookie的。
注意,不同浏览器之间是不共享Cookie的。
也就是说在你使用IE访问服务器时,服务器会把Cookie发给IE,然后由IE保存起来,
当你在使用FireFox访问服务器时,不可能把IE保存的Cookie发送给服务器。
3、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
4、Cookie的覆盖
对同一个服务端只会保存最后一次的cookie,逐次覆盖。
如果服务器端发送重复的Cookie那么会覆盖原有的Cookie,
例如客户端的第一个请求服务器端发送的Cookie是:Set-Cookie: a=A;
第二请求服务器端发送的是:Set-Cookie: a=AA,
那么客户端只留下一个Cookie,即:a=AA。
response.set_cookie() # 服务器写好键值给浏览器(设置cookie)
request.COOKIES.get() # 服务器取出值(获取cookie)
response.delete_cookie("cookie_key",path="/",domain=name) # 删除cookie
源码解释
6、练习
案例1:显示上次访问时间。
案例2:显示上次浏览过的商品。
三、session介绍(每个服务器为每个浏览器只有一条记录保存session)
session是针对保存浏览器的,不是保存用户的
Session是服务器端技术,利用这个技术,
服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,
由于session为用户浏览器独享,所以用户在访问服务器的web资源时 ,
可以把各自的数据放在各自的session中,
当用户再去访问该服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务
1、django中session语法(重点)
其他命令
2、session配置
3、练习
1 登录案例
需要的页面:
#login.html:登录页面,提供登录表单;
#index1.html:主页,显示当前用户名称,如果没有登录,显示您还没登录;
#index2.html:主页,显示当前用户名称,如果没有登录,显示您还没登录;
思考,如果第二个人再次再同一个浏览器上登录,django-session表会怎样?
2 验证码案例
验证码可以去识别发出请求的是人还是程序!
当然,如果聪明的程序可以去分析验证码图片!
但分析图片也不是一件容易的事,
因为一般验证码图片都会带有干扰线,人都看不清,那么程序一定分析不出来。