【问题标题】:Django: two sessions in the same browserDjango:同一浏览器中的两个会话
【发布时间】: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


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-24
    • 1970-01-01
    • 2013-07-07
    • 1970-01-01
    相关资源
    最近更新 更多