标签:etag ati header 修改 manage 字符 Nid config 计算
因为浏览器没有状态,不能保持链接
最大支持4096字节
每次向服务器发送请求时,都会把 cookie 中的数据封装到request.cookies中带到服务器,如果cookies过大会降低响应速度
1.记住密码
2.记住搜索关键词
def fun(request)
# 创建响应对象
resp = make_response("响应字符串")
resp = redirect('地址')
resp = render_template('模板')
# 增/改
resp.set_cookie(key,value,age)
# 删
resp.delete_cookie(key)
# 返回响应对象
return resp
# 查
request.cookies['key']
request.cookies.get('key',value)可以设置默认值,没有找到是付给key
from django.http import HttpResponse
# 创建响应对象
resp = HttpResponse()
render(request,'xxx.html',locals())
# 增/改
resp.set_cookie(key, value='', max_age=None, expires=None)
# 删
HttpResponse.delete_cookie(key)
# 返回响应对象
return resp
# 查
request.COOKIES.get('key',value)
cookie = self.get_cookie()/self.get_secure_cookie()
self.set_cookie()/self.set_secure_cookie()
from flask import session
# 配置 SECRET_KEY作为session的加密盐值
app.config['SECRET_KEY'] = "string"
# 增/改
session['key'] = value
# 删、
del session[key]
value = session.pop(key)
session.clear()
# 查
value = session['key']
flask将数据加密后存储回cookie中flask_session(可以认为是分布式储存),flask需要安装flask_session,才能将session真正存储到mysql中
# 过期时间
app.config[ 'PERMANENT_SESSION_LIFETIME' ] = timedelta( days=7 )
session.permanent = True
特征
使用 session 需要在浏览器客户端启动 cookie,且在cookie中存储session_id
每个客户端都可以在服务器端有一个独立的Session,一一对应
session对于象是一个在似于字典的SessionStore类型的对象, 可以用类拟于字典的方式进行操作
只能够存储能够序列化的数据,如字典,列表等
Django存储在mysql的django_session中
当使用session时需要迁移数据库,否则会出现错误
$ python3 manage.py makemigrations
$ python3 manage.py migrate
操作
# 启用Session--settings.py
INSTALLED_APPS = [
# 启用 sessions 应用
'django.contrib.sessions',
]
MIDDLEWARE = [
# 启用 Session 中间件
'django.contrib.sessions.middleware.SessionMiddleware',
]
SESSION_COOKIE_AGE = 60 * 60 * 24 * 7 * 2
指定sessionid在cookies中的保存时长(默认是2周),如下:
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
设置只要浏览器关闭时,session就失效(默认为False)
def fun(request)
# 增/改
request.session['KEY'] = VALUE
# 删
del request.session['KEY']
request.session.clear_expired() 删除过期的
# 查
VALUE = request.session['KEY']
VALUE = request.session.get('KEY', 缺省值)
keys_list = request.session.keys()
values_list = request.session.values()
items_list = request.session.items()
secury-key = request.session.session_key()
相同:都用于保存数据
不同点 | 储存位置 | 储存时间 | 安全性 | 提交方式 |
---|---|---|---|---|
session | 服务器 | 临时 | 高 | 服务器调度 |
cookie | 浏览器 | 永久 | 低 | 自动提交 |
强缓存(动态资源):
协商缓存(静态资源)
Last-Modified和if-Modified-since
强制缓存失效后,浏览器携带缓存标识向服务器发起请求,服务器根据缓存标识决定是否使用缓存的过程
服务器响应返回静态文件响应头包含Last-Modified(资源的最近一次修改时间)
浏览器接到服务器相应后检查Last-Modified,有则储存到浏览器缓存中,缓存时间根据各浏览器不同
火狐:(现在时间-上次时间)/10作为当次缓存时间
当浏览器再次发送该资源请求时,优先检查缓存中是否已经有缓存数据,
有缓存,未过期,不向服务器发送请求直接返回
有缓存,已失效,发送‘协商请求’到服务器,请求头中包含if -Modified-since,值为last-modified
服务器接到if -Modified-since,检查是否和该资源文件的最近修改时间相等
相等:证明资源没变,返回304响应状态码
不相等,证明资源有修改过,返回200响应状态码,且响应具体新的资源内容
无缓存,正常发送请求至服务器[F5+ctrl绝对不走缓存],取得最新资源
缺点:只能精确到秒,容易发生单秒内多次修改,检测不到
ETag和If-None-Match
流程和Last-Modified相同,但返回资源文件唯一标识(由服务器hash生成),任何改变都能捕捉更精确
Last-Modified VS ETag
精度不一样 - Etag 高
性能上 - Last-Modifi 高
标签:etag ati header 修改 manage 字符 Nid config 计算
原文地址:https://www.cnblogs.com/yangjunh/p/cookie-session-cache.html