def open_session(self, app, request):
sid = request.cookies.get(app.session_cookie_name)
# create a new session if the request does not include a token
if not sid:
return self.session_class(sid=self._generate_sid())
# attempt to retrieve the session associated with the given token
store_id = self.key_prefix + sid
saved_session = self.sql_session_model.query.filter_by(session_id=store_id).first()
# create a new session if the token doesn't represent a valid session
if not saved_session:
return self.session_class(sid=self._generate_sid())
# create a new session if the session has expired
elif saved_session.expiry <= datetime.utcnow():
# purge the expired session
self.db.session.delete(saved_session)
self.db.session.commit()
return self.session_class(sid=self._generate_sid())
# handle valid sessions
else:
try:
val = saved_session.data
data = self.serializer.loads(want_bytes(val))
return self.session_class(data, sid=sid)
except:
return self.session_class(sid=sid)
评论列表
文章目录