我试图了解会话在 Django 中是如何工作的。查看源代码SessionMiddleware
:
class SessionMiddleware(object):
def process_request(self, request):
engine = import_module(settings.SESSION_ENGINE)
session_key = request.COOKIES.get(settings.SESSION_COOKIE_NAME, None)
request.session = engine.SessionStore(session_key)
如果我理解正确,对于每个请求
SessionMiddleware.process_request()
都会sessionid
从 cookie 中获取 ,然后SessionStore
使用它创建一个新实例
sessionid
。
当我查看 and 的来源
__init__()
时:SessionStore
SessionBase
class SessionStore(SessionBase):
def __init__(self, session_key=None):
super(SessionStore, self).__init__(session_key)
class SessionBase(object):
def __init__(self, session_key=None):
self._session_key = session_key
self.accessed = False
self.modified = False
所以基本上SessionStore
只是创建一个新实例而不尝试在数据库中查找以查看具有指定的会话是否sessionid
已经存在。但这不应该是会话的全部意义吗——对于每个请求,Django 都需要在会话数据库中查找以查看会话是否已经存在?我猜这个数据库查找发生在某个地方,但我找不到它。
你能告诉我在哪里可以找到吗?还是我误解了会话在 Django 中的工作方式?
谢谢