【发布时间】:2011-05-13 07:10:02
【问题描述】:
我试图了解会话在 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() 将从
cookie,然后使用它创建一个新的SessionStore 实例
sessionid。
当我查看__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 的会话是否已存在
或不。但这不应该是整个会议的重点吗——对于每个
request Django 需要在 session 数据库中查找以查看是否
会话已经存在?我猜在某个地方这个数据库查找
发生但我找不到它。
你能告诉我在哪里可以找到它吗?还是我误解了如何 Django 中的会话工作?
谢谢
【问题讨论】:
标签: django session django-sessions