• cookie和session


    cookie 和 session

    为什么要有cookie和session

    因为我们的HTTP协议是无状态的

    就是说我们每次去请求都是独立的一次请求,就比如说我们刚刚登陆,到下一个页面,浏览器就不知道我们是谁了,所以引入了cookie和session用来保存我们的请求过的状态,让我们后端知道用户是谁.

    cookie具体点就是一段信息,他是服务器产生放在浏览器的一组键值对,其实就是保存在浏览器的一个文件.

    当浏览器访问我们的网站,浏览器就会携带上我们这个网站对应的cookie,这时候我们就知道这个访问的是谁了.

    如何在django中操作cookie

    设置cookie:

    • obj.set_cookie(键, 值)
    • obj.set_signed_cookie(键, 值, salt='加盐')
      • 参数:
      • max_age=None: 超出时间,以秒为单位
      • expires=None : 超出时间,已被max_age取代
      • path='/': cookie生效路径
      • domin=None: cookie生效域名
      • secure=False: https传输
      • httponly=False: 只能http协议传输,无法被js获取(底层抓包是可以获取并覆盖的)

    获取cookie:

    • request.COOKIES.get(键)

    删除cookie:

    • obj.delete_cookie(键)

    obj: 这个是三个返回的方法变形的(就是下面这种变形)

    return render(request, 'xx.html')
    变形成:
    obj = render(requesr, 'xx.html')
    # 在这个位置可以对obj添加cookie
    return obj
    

    session

    session是保存在服务器上面的键值对,并且可以设置过期的时间,默认的过期时间是14天

    以为cookie的最大支持字节是4096字节,以及cookie保存在浏览器,很容易被获取,所以session就产生了,他是有更高的安全性

    总的来说: cookie是弥补了http协议的无状态的不足,让服务器知道来的人是谁,但是cookie是以文本的形式存储在浏览器,安全性很差,所以我们使用cookie识别用户再去对应的session里面保存私密的信息以及超过4096的文本

    如何在django中操作session

    设置session:

    • requeset.session[键] = 值

    获取session:

    • request.get(键)

    删除session:

    • 删除服务端: request.session.delete()
    • 删除浏览器加客户端: request.session.flush()

    获取session的键

    • request.session.session_key

    删除session日期失效的

    • request.session.clear_expired()

    设置session的失效时间

    • request.session.set_expiry(value)
      • 如果value是个整数, session会在数秒后失效
      • 如果value是个datatime或timedelta,session就会在这个指定时间后失效
      • 如果value是个0, 那么session会在关闭浏览器后失效
      • 如果value是None, 那么session会在两周后失效(默认的)

    Django中的session配置(就是session保存位置)

    1. 数据库Session
    SESSION_ENGINE = 'django.contrib.sessions.backends.db'   # 引擎(默认)
    
    2. 缓存Session
    SESSION_ENGINE = 'django.contrib.sessions.backends.cache'  # 引擎
    SESSION_CACHE_ALIAS = 'default'                            # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置
    
    3. 文件Session
    SESSION_ENGINE = 'django.contrib.sessions.backends.file'    # 引擎
    SESSION_FILE_PATH = None                                    # 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir() 
    
    4. 缓存+数据库
    SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'        # 引擎
    
    5. 加密Cookie Session
    SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'   # 引擎
    
    其他公用设置项:
    SESSION_COOKIE_NAME = "sessionid"                       # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)
    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,默认修改之后才保存(默认)
    
    Django中Session相关设置
    
  • 相关阅读:
    Android Things专题 1.前世今生
    用Power BI解读幸福星球指数
    [leetcode]Simplify Path
    字段的划分完整的问题
    k-means算法MATLAB和opencv代码
    【Oracle】RAC下的一些经常使用命令(一)
    Java中经常使用缓存Cache机制的实现
    jenkins环境自动部署
    jenkins环境搭建
    springboot单元测试@test的使用
  • 原文地址:https://www.cnblogs.com/xiongchao0823/p/11768084.html
Copyright © 2020-2023  润新知