Django边学边记--状态保持(cookie和session)

Cookie

概念:

  • Cookie,也叫Cookies,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密),好比会员卡或餐票。

特点:

  • Cookie是由服务器端生成的一小段信息,发送给User-Agent(一般是浏览器)保管。
  • 当浏览器请求某网站时,会将本网站下所有Cookie信息提交给服务器。
  • Cookie以键值对的格式进行信息的存储。
  • Cookie基于域名安全,不同域名的Cookie是不能互相访问的。
  • Cookie有过期时间,如果不指定,关闭浏览器就过期
  • 因为电脑上的浏览器可能被其它人使用,建议cookie不要存储敏感信息如密码。
  • 典型应用:记住用户名,购物车,网站的广告推送等。

设置:

  • 需要一个HttpResponse类(或子类)对象,该对象中有一个方法set_cookie,通过[对象.set_cookie(key=“",value="”,max_age=XXX[秒],xxx)]设置 ,过期时间可以用max_age 和 expires 两种形式来设置,max_age 的值为秒数,expires的值为具体过期时间。
    def set_cookies(request):
    
        res = HttpResponse('')
        res.set_cookie('name','itjj')
    
        return res
    

      

获取:

  • cookie保存在浏览器返回的request对象的COOKIES属性里面,(在学习HttpReqeust对象的属性时,说过COOKIES是一个标准的Python字典,包含所有的cookie,键和值都为字符串)可以通过dict['键'] 或 .get('键') 的方法获取。
    def get_cookie(request):
    
        c = request.COOKIES.get('name2')
        return HttpResponse(c)
    

删除:

  可以通过HttpResponse对象中的delete_cookie方法来删除。 

response.delete_cookie('itjj')

Session

概念:

  • 类似于cookie,对于敏感、重要的信息,需要在服务器端进行状态保持就用session,服务端将session的id给浏览器,数据存在服务器。

特点:

  • 储存在服务器端,通过设置SESSION_ENGINE项指定Session数据存储的方式,可以存储在数据库、缓存、Redis等
  • Session包括三个数据:键,值,过期时间
  • session的id是通过cookie给浏览器的,如果想使用Session,浏览器必须支持Cookie,否则就无法使用Session了,也是就是session依赖于cookie。

启用Session

Django项目默认启用Session,可以在settings.py文件中查看

 

 

 注释掉就是不启用。

在redis中保存session

  1. 安装扩展
    pip install django-redis
    

     

  2. 在settings.py文件中添加如下设置

    CACHES = {
        'default': {
            'BACKEND': 'django_redis.cache.RedisCache',
            'LOCATION': 'redis://127.0.0.1:6379/1',
            'OPTIONS': {
                'CLIENT_CLASS': 'django_redis.client.DefaultClient',
            }
        }
    }
    SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
    SESSION_CACHE_ALIAS = 'default'
    

      

操作:

  • 与cookie不同的是 session 的设置和取值全部通过Httprequest 对象的Session属性进行读写操作
  • 增、改
  • request.session['键']=值
    
  • request.session.get('键',默认值)
    request.session['键']
  • del request.session['键']  删除会话中的指定键及值,在存储中只删除某个键及对应的值
    request.session.clear()    清除所有会话,在存储中删除值部分
    request.session.flush()    清除会话数据,在存储中删除会话的整条数据
  • 设置会话的超时时间,(默认两个星期)
    • 如果value是一个整数,会话将在value秒没有活动后过期
    • 如果value为0,那么用户会话的Cookie将在用户的浏览器关闭时过期
    • 如果value为None,那么会话永不过期
  • request.session.set_expiry(value)
posted @ 2021-09-12 19:59  微笑_百年  阅读(65)  评论(0编辑  收藏  举报