flask_session - RedisSessionInterface的open_session和save_session方法
def open_session(self, app, request):
sid = request.cookies.get(app.session_cookie_name)
if not sid:
sid = self._generate_sid()
return self.session_class(sid=sid, permanent=self.permanent)
if self.use_signer:
signer = self._get_signer(app)
if signer is None:
return None
try:
sid_as_bytes = signer.unsign(sid)
sid = sid_as_bytes.decode()
except BadSignature:
sid = self._generate_sid()
return self.session_class(sid=sid, permanent=self.permanent)
if not PY2 and not isinstance(sid, text_type):
sid = sid.decode('utf-8', 'strict')
val = self.redis.get(self.key_prefix + sid)
if val is not None:
try:
data = self.serializer.loads(val)
return self.session_class(data, sid=sid)
except:
return self.session_class(sid=sid, permanent=self.permanent)
return self.session_class(sid=sid, permanent=self.permanent)
def save_session(self, app, session, response):
domain = self.get_cookie_domain(app)
path = self.get_cookie_path(app)
if not session:
if session.modified:
self.redis.delete(self.key_prefix + session.sid)
response.delete_cookie(app.session_cookie_name,
domain=domain, path=path)
return
httponly = self.get_cookie_httponly(app)
secure = self.get_cookie_secure(app)
expires = self.get_expiration_time(app, session)
val = self.serializer.dumps(dict(session))
self.redis.setex(name=self.key_prefix + session.sid, value=val,
time=total_seconds(app.permanent_session_lifetime))
if self.use_signer:
session_id = self._get_signer(app).sign(want_bytes(session.sid))
else:
session_id = session.sid
response.set_cookie(app.session_cookie_name, session_id,
expires=expires, httponly=httponly,
domain=domain, path=path, secure=secure)
session_cookie_name

使用flask_session
- 导入 :
from flask_session import RedisSessionInterface
RedisSessionInterface
: 把session放到Redis里面
链接redis
RedisSessionInterface需要传递一些参数 : def __init__(self, redis, key_prefix, use_signer=False, permanent=True):
- 第一个参数 :
redis=Redis(host='127.0.0.1', port=6379)
- 第二个参数 :
key_prefix
, session存的时候的前缀
示例
from flask import Flask, session
from flask_session import RedisSessionInterface
from redis import Redis
app = Flask(__name__)
app.secret_key = 'asdf'
app.session_interface = RedisSessionInterface(
redis=Redis(host='127.0.0.1', port=6379),
key_prefix='flaskxxx'
)
@app.route('/login')
def login():
session['k1'] = 123
return 'login'
@app.route('/index')
def index():
v = session['k1']
print(v)
return 'index'
if __name__ == '__main__':
app.run()