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



我有一个Django网络应用程序,它允许用户进行协作。每个用户都会得到一个带有唯一代码的链接,他们可以点击该链接进入我的网站。在第一次访问页面时,我将这个唯一的代码存储在request.session中,然后在随后的页面访问中,我检索它以识别DB中的用户记录。我还在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

我认为这应该是好的,因为自己的代码会将两个会话隔离在两个独立的字典中,但如果Django(甚至第三方应用程序)在request.session中存储了一些东西,它可能会崩溃。

现代浏览器(如Firefox、Chromium、Brave…)能够在不参考现有历史记录、cookie等的情况下打开页面。

  • 在Firefox中,这被称为"私人浏览";你打开了一个"私人窗口"。

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

  • 在Chromium中,这被称为"隐身模式"。

通过使用其中任何一个,您可以创建一个新的"会话",该会话不会作为任何其他登录会话出现。这应该允许您同时拥有任意数量的会话。

最新更新