zoukankan      html  css  js  c++  java
  • django 中的cookie和session

    cookie:
    1,cookie是什么?
    cookie是服务器让浏览器保存在浏览器上的一组键值对
    2,为什么要有cookie?
    http 是无状态,每次请求之间没有任何关系,无法保持状态
    3,cookie的特点:
    1,服务器让浏览器设置的
    2,设置之后每次访问相同的页面带上cookie
    4,django中的操作cookie
    1,设置cookie
    rep = redirect('/idnex/')
    rep.set_cookie(key,value,max_age=1000)
    rep.set_signed_cookie(key,value,max_age=1000)
    2,获取cookie
    request.COOKIES['key']
    request.COOKIES.get['key']
     
    request.get_signed_cookie('key',salt='')
     
    3,删除cookie
    rep.delete_cookie('key')
    session
    什么是session?
    session是保存在服务器上的键值对,依赖于cookie
    为什么要有sessiion
    cookie在浏览器上不安全
    cookie长度受限制
    djagno中操作session
    设置session
    request.session['key'] = vlue
    request.session.setdefault(key,value)
    获取session
    request.session['key']
    删除session
    request.session.pop(key)
    del request.session['key']
     
    request.session.delete()只是清空session
    request.session.flush()同时删除cookie和sessoin
    设置超时时间
    request.session.set_expiry()
    设置当前过期的session
    request.session.clear_expired()
    其他配置
     
    2,特性:
    是服务让浏览器设置的,浏览器有权利不设置
    访问其他页面的时候携带着cookie
    能干什么
    登录
    seddion
    1,保存在服务器上的键值对
    2,一个cookie 对应 一个 session
    流程:
    1. 给首次登录的用户设置一个cookie  session:asdasdasasdasdas
    2. 开辟一块空间存session
    3. session中存要存的数据(键值对)
    4. 返回给浏览器cookie
     
    # 设置session
    request.session['is_login'] = 'True'
    # 获取session
    request.session.get('is_login', '')
     
    获取cookie
    request.COOKIES['key']
    request.get_signed_cookie('key',default=RAISE_ERROT,salt='',max_age=None)
    get_sined_cookie方法的参数
    default 默认值
    salt 加密盐
    max_age 后台控制过期时间
     
    设置Cookie
    rep = HttpResponse()
    rep = rrender(request,.....)
     
    rep.set_cookie(key,value,....)
    rep.set_signed_cookie(key,value,salt='加密盐')
     
     
    key:键
    value=,值
    max_age = None 超时时间
    expires=None, 超时时间(IE requires expires, so set it if hasn't been already.)
    path='/', Cookie生效的路径,/ 表示根路径,特殊的:根路径的cookie可以被任何url的页面访问
    domain=None, Cookie生效的域名
    secure=False, https传输
    httponly=False 只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)
     
    删除Cookie
    def logiout(request):
    rep = redirect('/login/')
    rep.delete_cookie('user')
    return rep
    cookie版登录:
    def check_login(func):
        @wraps(func)
        def inner(request, *args, **kwargs):
            next_url = request.get_full_path()
            if request.get_signed_cookie("login", salt="SSS", default=None) == "yes":
                # 已经登录的用户...
                return func(request, *args, **kwargs)
            else:
                # 没有登录的用户,跳转刚到登录页面
                return redirect("/login/?next={}".format(next_url))
        return inner
     
     
    def login(request):
        if request.method == "POST":
            username = request.POST.get("username")
            passwd = request.POST.get("password")
            if username == "xxx" and passwd == "dashabi":
                next_url = request.GET.get("next")
                if next_url and next_url != "/logout/":
                    response = redirect(next_url)
                else:
                    response = redirect("/class_list/")
                response.set_signed_cookie("login", "yes", salt="SSS")
                return response
        return render(request, "login.html")
     
    cookie版登录
     
     
     
     
     
     
    Session 用request调用
    1,加密
    2,数据量大
    流程:
    1. 给首次登录的用户设置一个cookie  session:asdasdasasdasdas
    2. 开辟一块空间存session
    3. session中存要存的数据(键值对)
    4. 返回给浏览器cookie
    # 设置session
    request.session['is_login'] = 'True'
    # 获取session
    request.session.get('is_login', '')
     
     
     
     
    # 获取、设置、删除Session中数据
    request.session['k1']
    request.session.get('k1',None)
    request.session['k1'] = 123
    request.session.setdefault('k1',123) # 存在则不设置
    del request.session['k1']
     
     
    # 所有 键、值、键值对
    request.session.keys()

  • 相关阅读:
    牛客-Python-字符流中第一个不重复的字符
    牛客网-python-表示数值的字符串
    牛客网-(标星)正则表达式的匹配
    牛客网-构建乘积数组
    牛客网-和为S的两个数字
    new code-和为S的连续正数序列
    newcode-平衡二叉树
    Reinforcement Learning学习笔记|Deep Q-learning算法
    Reinforcement Learning学习笔记|Q-learning算法
    C++|重拾|笔记20190307
  • 原文地址:https://www.cnblogs.com/lnrick/p/9692948.html
Copyright © 2011-2022 走看看