会话定义

  • 从一个浏览器打开一个网站,到关闭浏览器结束此次访问,称之为一次回话
  • HTTP协议是无状态的,导致会话难以保持

什么是Cookie

  • Cookie是以键值对的方式进行存储的,键值都是ASCII字符串的形式。
  • 存储的数据带有生命周期。
  • Cookie中的数据是按域存储隔离的,不同的域之间无法访问。
  • Cookie的内部的数据会在每次访问此网址的时候都会携带到服务器端,如果Cookie过大会降低响应速度。

Cookie意为“甜饼”,是由W3C组织提出,最早由Netscape社区发展的一种机制。目前Cookie已经成为标准,所有的主流浏览器如IE、Netscape、Firefox、Opera等都支持Cookie。

由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理。

Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改

Cookie的使用-存储

HttpResponse.set_cookie(key,value='',max_age=None,expires=None)

参数解读

  • key: Cookie的名字
  • value: Cookie的值
  • max_age: Cookie存活时间,秒为单位
  • expires: 具体过期时间

注意:如果不指定max_ageexpires的时候,关闭浏览器则失效

Cookie的使用-添加和修改

response = HttpResponse("Set Cookie")
response.set_cookie('Admin_token',123,3600)
return response

为浏览器添加键为 Admin_token值为123过期时间为1小时的Cookie

response = HttpResponse("Set Cookie")
response.set_cookie('Admin_token',456,3600)
return response

为浏览器添加键为 Admin_token值为123过期时间为1小时的Cookie,其实方法是一样的

Cookie的使用-获取

value = request.COOKIES.get('cookie名','默认值')
def  get_cookie(request):
    value = request.COOKIES.get("Admin_Token")
    return HttpResponse('当前设置的Cookie为: %s'%(value))

通过request.COOKIES.get的方法可以绑定的字典(dict)获取客户端的COOKIES数据

服务端如何知道这个数据的?

Admin-Token=beihai1; sessionid=hm70key5y6gryor6v5yvpqhgayrpugfh

放在Request Header中,请求会携带该参数传送到服务器中,必须是在有效期内

Cookie的使用-删除

HttpResponse.delete_cookie(key)

删除指定的Key的Cookie,如果Key不存在,则什么也不发生。

浏览器时如何进行设置Cookie的呢?

Set-Cookie: Admin-Token=beihai1; expires=Fri, 22 Oct 2021 06:33:27 GMT; Max-Age=259200; Path=/

当发送HTTP请求的时候会携带Set-Cookie的参数,从而进行设置Cookie