Python学习笔记Day21 - Cookie&Session

cookie就是客户端浏览器上存储的一个文件, 以字典存放数据

{"user": 'dachengzi'}
  • 设置cookie返回给用户

      res = redirect('/index/')
      res.set_cookie(key,value,...)
      res.set_cookie('user','dachengzi')
      return res
    
      # 参数:
          key,              -> 键
          value,            -> 值
          max_age=None,     -> 超时时间(s)
          expires=None,     -> 超时时间(指定datatime)(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获取(底层抓包可以获取或覆盖)
    
  • 获取cookies

      v = request.COOKIES['user']
      v = request.COOKIES.get('user')
    
  • 清除cookies

      request.COOKIES.clear()
    
  • 加密cookies

      rep.set_signed_cookie(key,value,salt='加密盐',...)
      request.get_signed_cookie(key, default=RAISE_ERROR, salt='加密盐')
    
      # 参数:
          default: 默认值
             salt: 加密盐
          max_age: 后台控制过期时间
    
  • 通过jQuery操作cookie

    由于cookie保存在客户端的电脑上,所以,JavaScript和jquery也可以操作cookie。

      <script src='/static/js/jquery.cookie.js'></script>
    
      # 设置
          $.cookie('the_cookie','the_value',{
              expires:7,      -> (Number|Date)有效期;设置整数时,单位是天;也可以设置一个日期对象;
              path:'/',       -> (String)该Cookie能访问的页面路径;'/'表示所有页面;
              domain:'jquery.com',    -> (String)创建该Cookie的页面域名;
              secure:true     -> (Booblean)若为true,那么此Cookie的传输会要求一个安全协议,例如:HTTPS;
          }) 
    
      # 读取
          $.cookie('user'); 
    
      # 删除
          $.cookie('user',null);      
    

Session

基于Cookie做用户验证时:敏感信息不适合放在cookie中

Session基于cookie

a. Session原理

Cookie是保存在用户浏览器端的键值对

Session是保存在服务器端的键值对

生成随机字符串 -> 只将字符串发给cookie -> 设置用户数据的字典 -> 存入session

b. Session的使用

  • 添加Session

    session默认放在数据库中,要用session需要先注册migrations、migrate

      request.session['username'] = user123
      request.session['is_login'] = True
    
  • 获取、设置Session中数据

      request.session['k1']           # 不存在报错
      request.session.get('k1',None)  # 不存在则返回none
    
      request.session['k1'] = 123
      request.session.setdefault('k1',123) # 存在则不设置
    
  • 注销

    获取当前用户的"session_key"并通过delete删除

      request.session.clear()
    
  • 前端获取session信息

      {{ request.session.username }}
    
  • 后端处理session

      # 删除用户session数据中的某一条
      del request.session['k1']   
    
      # 删除当前用户的所有Session数据
      request.session.delete("session_key")
    
      # 所有 键、值、键值对(类似字典)
      request.session.keys()
      request.session.values()
      request.session.items()
      request.session.iterkeys()
      request.session.itervalues()
      request.session.iteritems()
    
      # 获取用户session的随机字符串
      request.session.session_key
    
      # 将所有Session失效日期小于当前日期的数据删除
      request.session.clear_expired()
    
      # 检查用户的"session_key"在数据库中是否存在
      request.session.exists("session_key")
    
      # 设置
      request.session.set_expiry(value)       # 默认的超时时间是两周
          * 如果value是个整数,session会在些秒数后失效。
          * 如果value是个datatime或timedelta,session就会在这个时间后失效。
          * 如果value是0,用户关闭浏览器session就会失效。
          * 如果value是None,session会依赖全局session失效策略。
    

c. Session配置(通用配置)

./settings.py

SESSION_COOKIE_NAME = "sessionid"        -> cookie保存随机字符串时的key(默认)
SESSION_COOKIE_PATH = "/"                -> Session的cookie保存的路径(默认)
SESSION_COOKIE_DOMAIN = None              -> Session的cookie保存的域名(默认)
SESSION_COOKIE_SECURE = False             -> 是否Https传输cookie(默认)
SESSION_COOKIE_HTTPONLY = True            -> 是否Session的cookie只支持http传输(默认)
SESSION_COOKIE_AGE = 1209600              -> Session的cookie失效日期(2周)(默认)
SESSION_EXPIRE_AT_BROWSER_CLOSE = False   -> 关闭浏览器使Session过期(默认)
SESSION_SAVE_EVERY_REQUEST = False        -> 是否每次请求都更新Session(默认)

d. 引擎的配置

./settings.py

# 数据库Session(默认)
    SESSION_ENGINE = 'django.contrib.sessions.backends.db'   

# 缓存Session
    SESSION_ENGINE = 'django.contrib.sessions.backends.cache'  
    SESSION_CACHE_ALIAS = 'default'            -> 使用的缓存别名 (默认内存缓存,也可以是memcache),此处别名依赖缓存CACHES的设置

# 文件Session
    SESSION_ENGINE = 'django.contrib.sessions.backends.file'    
    SESSION_FILE_PATH = None           -> 文件夹路径 如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir()  如:/var/folders/d3/j9tj0gz93dg06bmwxmhh6_xm0000gn/T

# 缓存+数据库Session
    # 数据库用于做持久化,缓存用于提高效率,先在缓存里找
    SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'

# 加密cookie
    # 将数据加密放进cookie
    SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'

参考文档

作业

主机管理:
    1、单表操作
    2、一对多
    3、多对多
    要求:
        a. 删除对话框
        b. 修改,添加新URL
        c. 基于cookie进行用户认证
        d. 定制显示个数
        e. 分页
预习:
    Form: http://www.cnblogs.com/wupeiqi/articles/6144178.html
    Model:http://www.cnblogs.com/wupeiqi/articles/6216618.html
posted @ 2020-07-05 23:13  Jerome12138  阅读(164)  评论(0编辑  收藏  举报