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相关设置
原文地址:https://www.cnblogs.com/xiongchao0823/p/11768084.html