Django:在同一浏览器中的两个会话

时间:2014-02-23 16:52:02

标签: python django django-sessions

我有一个Django webapp,允许用户进行协作。每个用户都会获得一个链接,其中包含他们点击进入我网站的唯一代码。在第一页访问时,我将此唯一代码存储在request.session中,然后在后续页面访问中检索它以识别用户在数据库中的记录。我还在request.session中存储了关于用户及其会话的各种其他内容。

我想允许在同一浏览器的不同窗口/标签中发生两个会话。这是为了使测试更容易。我的同事花了很多时间同时使用该网站测试多个用户。到目前为止,我一直在指示他们使用不同的浏览器或不同的浏览器配置文件,以便不共享会话cookie。但他们总是忘记这条指令(或做错了),当应用程序无法按预期工作时最终会感到困惑。

我的想法是在每个网址中添加用户的唯一代码(称为user_id),然后将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

我认为这应该没问题,因为自己的代码会将两个会话隔离在两个单独的词典中,但如果Django(甚至是第三方应用程序)在request.session中存储某些内容,它可能会崩溃。想知道是否有人建议采用其他方式来处理这个问题。

1 个答案:

答案 0 :(得分:0)

现代浏览器(例如Firefox,Chromium,Brave,...)可以在不参考现有历史记录,Cookie等的情况下打开页面。

  • 在Firefox中,这被称为“Private Browsing”;你打开一个“私人窗口”。

  • 在Brave中,这被称为“私人标签”。

  • 在Chromium中,这被称为“Incognito Mode”。

通过使用其中任何一个,您可以创建一个不会像任何其他登录会话一样出现的新“会话”。这应该允许您一次拥有任意数量的会话。