zoukankan      html  css  js  c++  java
  • Django--cookie(登录用)

    一、cookie产生原因

    二、cookie的原理图

    三、Django中如何设置/读取/删除cookie

    四、Django中如何设置cookie的参数

    一、cookie产生原因

    HTTP协议的无状态保存:
    指的是同一个浏览器给服务器发两次请求,
    服务器不知道第二次请求之前是否还发过请求。
    每一次访问服务器都认为是新请求。

    所以需要对会话进行跟踪,cookie就是会话跟踪技术之一

    PS:四种会话跟踪技术
    a) URL重写:
    URL地址重写的原理是将该用户Session的id信息重写 到URL地址中,以便在服务器端进行识别不同的用户。
    URL重写能够在客户端停用cookies或者不支持cookies的时候仍然能够发挥作用。
    b) 隐藏表单域:
    将用户Session的id添加到HTML表单元素中提交到服务器,此表单元素并不在客户端显示,浏览时看不到,源代码中有。
    c) Cookie
    d) session

    二、cookie的原理图

    cookie是具体一个浏览器针对一个服务器存储的key-value

    有过期时间,可调,默认是两周

    问题来了,服务器是指什么?ip+port 还是域名?

    看cookie的原理图:

    先看上门图片中的场景,理解好三个问题,就理解了cookie机制:

    1、在cookie有效期内,哪怕图中A电脑关机在开机,A电脑的浏览器访问域名y1还是会带这个cookie{is_login:true}
    2、在cookie有效期内,A电脑的同一个浏览器访问域名y2不会带上域名y1的cookie,而是y2的cookie
    2、如果是新的浏览器,访问这个服务器,会带一个空cookie

    三、Django中如何设置/读取/删除cookie

    1、设置cookie

    def login(request):
      login_success=1
      if login_success:
        # 获取响应体(render或redirect也可以,都是继承的HttpResponse)
        response=HttpResponse("登录成功")
        # 在响应体设置cookie
        response.set_cookie("is_login", True)
        return response
      else:
        return HttpResponse("登录失败")

    2、读取cookie

    def index(request):
      cookies = request.COOKIES
      # cookies.get("k","")获取不到默认为""
      is_login = cookies.get("is_login")
      if is_login:
        #已登录
      else:
        #跳转到登录页面

    3、删除cookie:注销的时候能用到

    response.delete_cookie("session_id",path="/",domain=name)

    四、Django中如何设置cookie的参数

    def set_cookie(self,
    key,        #键
    value='',     #值
    max_age=None,  #超时时间 cookie需要延续的时间(以秒为单位)如果参数是None,这个cookie会延续到浏览器关闭为止。
    expires=None,     #超时时间 expires默认None ,cookie失效的实际日期/时间。设置方式datetime.datetime(year=2018,month=5,day=29,hour=14)
    path='/',     #Cookie生效的路径,浏览器只会把cookie回传给带有该路径的页面,这样可以避免将cookie传给站点中的其他的应用。
             # “/”表示根路径,根路径的cookie可以被任何url的视图函数获取            
    domain=None,    #Cookie生效的域名,你可用这个参数来构造一个跨站cookie。
               #如, domain=".example.com"  表示所构造的cookie对下面这些站点都是可读的:
            #www.example.com 、 www2.example.com 和an.other.sub.domain.example.com
              #如果该参数设置为 None ,cookie只能由设置它的站点读取。
    secure=False,     #如果设置为 True ,浏览器将通过HTTPS来回传cookie。
    httponly=False    #只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)
    )

  • 相关阅读:
    [LeetCode] Recover Binary Search Tree 解题报告
    [LeetCode] Remove Nth Node From End of List 解题报告
    linux的套接口和管道
    vim配置文件管理WM和taglist
    Debian on VirtualBox下共享win7文件夹设置
    makefile文件的两种常用书写格式(搜索路径式+递归式)
    介绍一种零件分类编码系统【原】
    VSTO EXCEL篇学习笔记三【原】
    VSTO EXCEL篇学习笔记二【原】
    浅述ERP物料编码【转】
  • 原文地址:https://www.cnblogs.com/staff/p/10735876.html
Copyright © 2011-2022 走看看