zoukankan      html  css  js  c++  java
  • Django中使用cookie和session

    Django中使用cookie与session

    一、cookie

    cookie的由来:由于HTTP协议是无状态的,每次请求都是独立的请求,为了能够保存某些数据,cookie便产生了。

    什么是cookie:cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组键值对。下次访问服务器的时候,浏览器会自动携带这些键值对,以便服务器提取有用数据。

    cookie的原理:cookie的工作原理是:由服务器产生内容,浏览器收到请求后保存在本地;当浏览器再次访问服务器时,会自动携带cookie,这样服务器就能够通过cookie的内容判断是'谁'来访问了。

    Django中使用cookie

    设置cookie:

    # views.py
    res = HttpResponse('...')
    
    # 普通cookie
    res.set_cookie(key, value, ...)
    # 加盐cookie
    res.set_signed_cookie(key, value, salt='加密盐', max_age=None, ...)
    

    获取cookie:

    # views.py
    
    def index(request):
        # 获取普通cookie
        request.COOKIE['key']
        # 获取加盐的cookie
        request.get_signed_cookie(key, salt='加密盐', default=None)
    

    删除cookie:

    # views.py
    
    def logout(request):
        res = redirect('/login/')
        res.delete_cookie('key')
        return res
    

    二、session

    session的由来:cookie虽然在一定程度上解决了保存状态的需求,但是由于cookie本身最大支持4096字节,以及cookie本身存储在浏览器上并不安全(可能被拦截或窃取)。因此需要有一种新的东西,它能支持更多的字节,并且保存在服务器,有较高的安全性。也就是session。

    然而基于HTTP协议的无状态特征,服务器根本不知道访问者是’谁‘,为了解决这个问题cookie就起了作用。

    我们可以给每个客户端的cookie分配一个唯一的id,这样用户在访问时,通过cookie,服务器就知道访问者是’谁‘了。然后我们再根据不同的cookie的id,在服务器上保存一段时间的私密信息(如账号,密码等)。

    总结而言:cookie弥补了HTTP无状态的不足,让服务器知道访问的人是'谁';但是cookie以文本的形式保存在本地,自身安全性较差;所以我们就通过cookie识别不同的用户,对应的在session里保存私密的信息以及超过4096字节的文本。

    Django种session的相关方法

    # 获取session
    def index(request):
        request.session.get('k1')
        """
        1.浏览器发送cookie到Django后端之后,Django会自动获取到cookie值
        2.拿着随机字符串去django_session表中比对 是否有对应的数据
        3.如果比对上了,就将随机字符串所对应的数据取出赋值给request.session
        	如果对不上,那么request.session就是个空
        """
        # django_session表是针对浏览器的 不同的浏览器来才会有不同的记录
        
    # 设置session
    def index(request):
        request.session['k1'] = 123  # 仅仅只会在内存产生一个缓存
        request.session.setdefault('k1', 123)  # 存在则不设置
        """
        1.Django内部自动生成随机的字符串
        2.在django_session表中存入数据
        3.将产生的随机字符串发送给浏览器,让浏览器保存到cookie中
        """
        
    # 删除sessiona
    def index(request):
        request.session.delete()  # 只删除服务端的session
        request.session.flush()  # 浏览器和服务端的session全部删除
    

  • 相关阅读:
    django QQ认证登录
    python mixin到底是什么 django
    Django View类的解析
    [置顶] 十道海量数据处理面试题
    Epoll简介以及例子
    GCC在C语言中内嵌汇编 asm __volatile__
    在FireBug中计算Javascript 运行时间
    Two Sum
    Longest Consecutive Sequence
    Evaluate Reverse Polish Notation
  • 原文地址:https://www.cnblogs.com/17vv/p/11766191.html
Copyright © 2011-2022 走看看