• cookie和session讲解


    1.cookie是什么?

            保存在浏览器本地上的一组组键值对

    2.session是什么?

            保存在服务器上的一组组键值对

    3.为什么要有cookie?

             HTTP是无协议状态,每次请求都是互相独立的,没有办法保存状态

    4.为什么要有session?

          cookie的大小和个数受到浏览器的限制

          cookie保存在本地浏览器不太安全

    5.cookie特性:

           由服务让浏览器进行设置返回set-cookie的响应头

           浏览器将键值对保存在本地,有权利不保存,下次访问是继续携带

    django中操作cookie

      

    # 设置cookie
    response = HttpReponse('xxx')
    response.set_cookie(key,value) # max_age  超时时间  path 生效的路径 
    response.set_signed_cookie(key,value,salt='xxx')
    
    # 获取cookie 
    request.COOKIES  {}  .get(key)
    request.get_signed_cookie(key,salt='xxx',default='')
    
    # 删除cookie   将值设置为空 超时时间设置为0 
    response.delete_cookie(key)

    6.session的过程

      第一个请求,没有cookie,设置键值对,根据浏览器生成一个唯一表是,给一个字典设置键值对

    将字典转成字符串(json序列化)进行加密,将唯一标识和字符串保存在数据库中(django-session)返回给浏览器唯一标识(sessionid)的cookie,下次请求携带sessionid,服务器根据session找到对应的数据(session-data)进行解密,进行反序列化,根据key获取对应的值

      

    # 设置session
    reqeust.session[key] = value
    
    # 获取
    reqeust.session[key]
    reqeust.session.get(key)
    
    # 删除
    request.session.pop(key)   del reqeust.session[key] 
    request.session.delete()   # 删除所有的键值对   不删除cookie
    request.session.flush()    # 删除所有的键值对   也删除cookie
    
    # 其他
    默认的超时时间(2周)
    request.session.set_expiry(value)     # 设置超时时间
    request.session.clear_expired()    # 清除已经失效的session数据
    
    
    from django.conf import global_settings
    
    SESSION_COOKIE_NAME = 'sessionid' 
    SESSION_COOKIE_AGE = 60 * 60 * 24 * 7 * 2
    SESSION_SAVE_EVERY_REQUEST = True  # 每次请求都更新session数据
    SESSION_EXPIRE_AT_BROWSER_CLOSE = True  # cookie在浏览器关闭时就失效
    SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 默认是数据库  文件  缓存  数据库+缓存  加密cookie

      

     

  • 相关阅读:
    解决:vue/nodeprecatedvbindsync
    clearValidate elementui为什么没效果
    vue state vuex使用
    【转】解决iframe使用postMessage传值addEventListener未接收到却收到webpackwarning的问题
    elementui中eltable 显示空白 不显示
    在vue中使用lottie动画
    装饰模式(Decorator)
    模版方法(Template Method)
    Redis数据类型、Redis列表命令
    RabbitMQ、ErLang下载、RabbitMQ下载
  • 原文地址:https://www.cnblogs.com/wenyeqing/p/13645955.html
Copyright © 2020-2023  润新知