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获取(不是绝对,底层抓包可以获取到也可以被覆盖)
    )

  • 相关阅读:
    h5 穿透滚动
    Safari 导航栏
    浮层滚动问题
    兼容性常规检测
    CORS
    Webpack 一些概念
    01 离散时间信号的时域表示
    03 信道容量
    01 MATLAB基本概念
    02 字斟句酌
  • 原文地址:https://www.cnblogs.com/staff/p/10735876.html
Copyright © 2011-2022 走看看