zoukankan      html  css  js  c++  java
  • django之session cookie

    cookie与session

    前提:由于http协议是无状态的,无法记录用户的状态,因此我们就利用cookie与session来帮助我们完成状态记录保存。

    cookie

    cookie就是保存在客户端浏览器上的键值对

      工作原理:当你登陆成功之后 浏览器上会保存一些信息,下次再访问的时候,就会带着这些信息去访问服务端 服务端通过这些信息就可以识别出你的身份

      cookie虽然是写在客户端浏览器上的  但是是服务端设置的 浏览器可以选择不服从命令 禁止写cookie 但这样 往往登录会出现错误

    session

    session就是保存在服务器上的键值对

      session虽然是保存在服务器上的键值对,但是它是依赖于cookie工作的

      服务端返回给浏览器一个随机的字符串  浏览器以键值对的形式保存   sessionid:随机字符串

      浏览器在访问服务端的时候,就会将随机字符串携带上   后端获取随机字符串与后端的记录做比对   

        随机字符串1:数据1

        随机字符串2:数据2

    Django中Cookie操作

    django返回给客户端浏览器的都必须是HttpResponse对象

    #第一种直接返回
        return HttpResponse()
        return render()
        return redirect()
    #第二种先实例化对象 再返回
        obj1 = HttpResponse()
        return obj1
        obj2 = render()
        return obj2
        obj3 = redirect()
        return obj3

    操作cookie的方法:

    #设置cookie利用的就是HttpResponse对象
        obj1.set_cookie('k1','v1')
    
    #获取cookie
        request.COOKIE.get('k1')
    
    #删除cookie
        obj1.delete_cookie('k1')
    #设置超时时间
        max_age = None,超时时间
        expires=None,超时时间(IE requires expires, so set it if hasn't been already.)

    cookie登陆版校验

    def login(request):
        if request.method == 'POST':
            username = request.POST.get('username')
            password = request.POST.get('password')
            if username == 'jason' and password == '123':
                #先获取url中get请求中携带的参数
                old_url = request.GET.get('next')
                if old_url:
                    #设置cookie
                    obj = redirect(old_url)
                else:
                    #如果用户直接访问的登陆页面那么直接跳到网站首页
                    obj = redirect('/home/')
                obj.set_cookie('name','jason')
                return obj
        return render(request,'login.html')
    
    def login_auth(func):
        @wraps(func)
        def inner(request,*args,**kwargs):
            target_url = request.get_full_path()
            if request.COOKIES.get('name') == 'jason':
                res = func(request,*args,**kwargs)
                return res
            else:
    
                return redirect('/login/?next=%s'%target_url)
        return inner
    cookie登陆版

    Django中Session操作

    #设置session
        request.session['name'] = 'jason'
    """
        上面这句话发生了三件事
        1.django内部自动生成了一个随机字符串
        2.将随机字符串和你要保存的数据  写入django_session表中(先在内存中生成一个缓存记录,等到经过中间件的时候才会执行)   
        3.将产生的随机字符串发送个浏览器写入cookie
        
                sessionid:随机字符串
    """
    
    #获取session
        request.session.get('name')
    """
       上面这一句话发生了三件事
        1.django内部会自动从请求信息中获取到随机字符串
        2.拿着随机字符串去django_session表中去比对
        3.一旦对应上了就将对应的数据解析出来放到request.session中
    
    """
    #django_session表中默认的超时时间是14天   其中的一条记录只针对一个浏览器
    
    
    #删除当前会话的所有session数据
          request.session.delete()   #删除的是浏览器的sessionid信息
     
    #删除当前的会话数据并删除会话的cookie
           request.session.flush()  #将浏览器和服务端全部删除‘        
    
    # 设置会话Session和Cookie的超时时间
            request.session.set_expiry(value)
                * 如果value是个整数,session会在些秒数后失效。
                * 如果value是个datatime或timedelta,session就会在这个时间后失效。
                * 如果value是0,用户关闭浏览器session就会失效。
                * 如果value是None,session会依赖全局session失效策略。
     

    总结:你在后期可以i将一些数据保存到session表中,保存的数据,可以在后端任意位置获取到

    万般皆下品,唯有读书高!
  • 相关阅读:
    五分钟秒懂机器学习混淆矩阵、ROC和AUC
    五分钟学会Python装饰器,看完面试不再慌
    LeetCode54 螺旋矩阵,题目不重要,重要的是这个技巧
    Golang——变量的声明与定义
    LeetCode52题,别再问我N皇后问题了
    spark中的pair rdd,看这一篇就够了
    MySQL不香吗,为什么还要有noSQL?
    JBOSS安装配置详细教程
    Aspose.Words关于域的应用
    SqlServer PIVOT行转列
  • 原文地址:https://www.cnblogs.com/s686zhou/p/11586127.html
Copyright © 2011-2022 走看看