cookie 和 session
为什么要有cookie和session
因为我们的HTTP协议是无状态的
就是说我们每次去请求都是独立的一次请求,就比如说我们刚刚登陆,到下一个页面,浏览器就不知道我们是谁了,所以引入了cookie和session用来保存我们的请求过的状态,让我们后端知道用户是谁.
cookie
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相关设置