在一个会话的多个请求中共享数据,这就是会话跟踪技术。例如在一个会话中的请求如下:  请求银行主页;

请求登录(请求参数是用户名和密码);

请求转账(请求参数与转账相关的数据);

请求信誉卡还款(请求参数与还款相关的数据)。

在这上会话中当前用户信息必须在这个会话中共享的,因为登录的是张三,那么在转账和还款时一定是相对张三的转账和还款!这就说明我们必须在一个会话过程中有共享数据的能力。

会话一定是反复的沟通,至于多少次,没有上限!

HTTP是无状态保存

简单来讲,HTTP要求浏览器对服务器的请求,每一个请求,对于服务器而言,都是新的请求

服务器,并不知道浏览器是谁。

2. 会话路径技术使用Cookie或session完成

我们知道HTTP协议是无状态协议,也就是说每个请求都是独立的!无法记录前一次请求的状态。但HTTP协议中可以使用Cookie来完成会话跟踪!在Web开发中,使用session来完成会话跟踪,session底层依赖Cookie技术.

什么叫Cookie

Cookie是key-value结构,类似于一个python的字典 ,随着服务器端的响应发送给客户端浏览器,然后客户端浏览器会把Cookie保存起来,当下一次访问服务器时把cookie再发给服务器.

cookie是由服务器创建,然后通过响应发送给客户端的一个键值对

客户端会保存Cookie,并会标记出Cookie的来源(哪个服务器)

当客户端想服务器发出请求时会把所有这个服务器的Cookie包 在请求中发送给服务器,这样服务器就可以识别客户端


Cookie规范

Cookie大小上限为4KB;

一个服务器最多在客户端浏览器上保存20个Cookie;

一个浏览器最多保存300个Cookie;

每一个客户端浏览器,都有一个cookie容器。

cookie:针对一个服务器,保存在客户端某一个浏览器上的key-value存储的数据结构中

服务器有权利向浏览器写入cookie

一旦写入cookie,那么下次访问,会带着cookie去访问服务器

比如电脑的谷歌浏览器和火狐浏览器,各自有独立的cookie容器,不能相互访问!

request是客户端请求,response是服务端响应。

读取客户端的cookies要用request的,但是要写入客户端cookies就要用response

urls.py
urlpatterns =[#url(r'^admin/', admin.site.urls),
url(r'^login/', views.login),
url(r'^index/', views.index),
]
views.py
from django.shortcuts importrender, HttpResponse, redirectfrom django.urls importreverseimportdatetime#Create your views here.
defindex(request):print(request.COOKIES) #打印cookie
is_login = request.COOKIES.get("is_login")if notis_login:return redirect("/login/")
username=request.COOKIES.get("username")#获取cookies的username值
time=request.COOKIES.get("login_time")return render(request, "index.html",{"username":username,"login_time":time})deflogin(request):if request.method == "POST":
user= request.POST.get("user")
pwd= request.POST.get("pwd")if user == "zaizai" and pwd == "123":
obj= redirect("/index/") #302重定向登陆页面
#obj.set_cookie("is_login", True)
obj.set_cookie("is_login", True, 5) #cookie设置登陆状态 设置为5秒钟,cookie失效
obj.set_cookie("username", user, 5) #cookie设置用户名
#获取当前时间
now=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
obj.set_cookie("login_time",now)returnobjreturn render(request, "login.html")
login.html
Title 
 
{% csrf_token %}用户名

密码