Django的session机制
1. Session
如果不涉及⽤户登录等敏感信息时,Cookie 能够满⾜⼤部分的场景需求。⽽客户端(如浏览器)会将 Cookie 是保存在硬盘中。如果⽤户登录敏感信息保存到 cookie 中,会存在安全性问题。因为当 HTTP 请求被⿊客拦截,然后劫持 cookie 信息。⿊客就可以凭借该 cookie 登录对应的⽹站。
Session 的出现很好地解决的这个问题。Session 机制是⼀个服务器端的机制。它会将信息保存服务器端,跟客户端通信只需要⼀个随机的字符串 session_id。如果客户端没有禁⽌ Cookie 功能,session_id 通常是保存在 Cookie中 的。
2. Django中session的简单实现
django 的session存储可以利⽤中间件middleware来实现。B/S架构中,mvc模式下服务器中间件的执⾏过程是。
INSTALLED_APPS =[
# 启⽤ sessions 应⽤
'ib.sessions',
]
session如何设置和读取MIDDLEWARE =[
# 启⽤ Session 中间层
'ib.sessions.middleware.SessionMiddleware',
]
3. Django中session的存储
数据库/缓存/混合存储
SESSION_ENGINE='ib.sessions.backends.db'# 存储到数据库
SESSION_ENGINE='ib.sessions.backends.cache'# 本地缓存
SESSION_ENGINE='ib.sessions.backends.cached_db'# 混合存储,优先从缓存读取数据,没有读取数据库数据
使⽤Redis做session存储,settings.py添加配置(需要安装django-redis模块)
CACHES ={
"default":{
"BACKEND":"django_redis.cache.RedisCache",
"LOCATION":"redis://127.0.0.1:6379/1",
"OPTIONS":{
"CLIENT_CLASS":"django_redis.client.DefaultClient",
}
}
}
SESSION_ENGINE ="ib.sessions.backends.cache"
SESSION_CACHE_ALIAS ="default"
4.中间件
创建中间件,⽤于签发token/id等⽤于session解析及认证。
def my_middleware(get_response):
def middleware(request):
# session 解析相关⽅法
response = get_response(request)
return response
return middleware
def my_middleware2(get_response):
def middleware(request):
# session 签发token相关⽅法
response = get_response(request)
return response
return middleware
MIDDLEWARE =[
'_middleware1',# 添加
'_middleware1',# 添加
]
5. Session操作
request.session['键']=值# 写session
('键',默认值)# 根据键读值
request.session.clear()# 清除所有session,在存储中删除值部分request.session.flush()# 清除session数据,在存储中删除session的整条数据del request.session['键']# 删除session中的指定键及值
request.session.set_expiry(value)# 设置session有效期
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论