【发布时间】:2014-03-25 03:21:41
【问题描述】:
我有一个允许用户协作的 Django webapp。每个用户都会获得一个链接,其中包含他们单击以访问我的网站的唯一代码。在第一次访问页面时,我将这个唯一代码存储在 request.session 中,然后在随后的页面访问中,我检索它以识别数据库中的用户记录。我还在request.session 中存储了有关用户及其会话的各种其他信息。
我想允许两个会话在同一浏览器的不同窗口/选项卡中发生。这是为了使测试更容易。我的同事花费大量时间测试同时使用该站点的多个用户。到目前为止,我一直在指导他们使用不同的浏览器或不同的浏览器配置文件,以便不共享会话 cookie。但他们总是忘记这条指令(或做错了),当应用程序无法按预期运行时,他们最终会感到困惑。
我的想法是将用户的唯一代码(称为user_id)放在每个 URL 中,然后将 request.session 细分为多个字典,所以我的基于类的视图会是这样的:
def dispatch(...):
user_id = kwargs['user_id']
self.request_session = self.request.session[user_id]
然后像往常一样使用这个变量self.request_session:
self.request_session['time_started'] = now
...
然后在返回我的回复之前,将其分配回去:
self.request.session[user_id] = self.request_session
我认为这应该没问题,因为自己的代码会将两个会话隔离在 2 个单独的字典中,但如果 Django(甚至是第 3 方应用程序)在 request.session 中存储某些内容,它可能会崩溃。想知道是否有人推荐另一种方法来处理这个问题。
【问题讨论】:
-
我同意@bignose 的观点,即使用“隐私浏览”功能是解决您的测试问题的正确方法。而且,如果您仍然想使用您所描述的 hack,是否将其作为中间件而不是作为特定视图的一部分来实现更合适?
标签: python django django-sessions