【问题标题】:Django sessions abandoned in first tab when clicking link in second在第二个选项卡中单击链接时,Django 会话在第一个选项卡中被放弃
【发布时间】:2014-05-19 18:40:08
【问题描述】:

不知道这是否是 Django 特有的,但我的网站是我唯一遇到过这种情况的网站,而且我认为我没有对会话数据做任何特别的事情(只是使用老派数据库后端)。

当用户登录(在选项卡 A)并在同一域上打开一个新选项卡(选项卡 B)时,cookie 会转移到第二个选项卡。但是,如果用户单击选项卡 B 中的链接,然后刷新选项卡 A 或单击该选项卡中的链接,他会立即注销。

我多年来一直在谷歌上搜索这个问题,但没有运气,所以非常感谢任何人的帮助。如果这是一件非常基本的事情,我们深表歉意。

MIDDLEWARE_CLASSES = (
    'django.middleware.cache.UpdateCacheMiddleware',
    'bambu.sites.middleware.DomainRedirectMiddleware',
    'nymbol.utils.middleware.RequireHTTPSMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'maintenancemode.middleware.MaintenanceModeMiddleware',
    'bambu.analytics.middleware.AnalyticsMiddleware',
    'bambu.enqueue.middleware.EnqueueMiddleware',
    'bambu.minidetect.middleware.MiniDetectMiddleware',
    'nymbol.utils.middleware.UserPlanMiddleware',
    'nymbol.manager.middleware.APILegacyMiddleware',
    'django.middleware.cache.FetchFromCacheMiddleware'
)
  • bambu.sites.middleware.DomainRedirectMiddleware 将访问者重定向到正确的域,因为该站点有许多别名域
  • nymbol.utils.middleware.RequireHTTPSMiddleware 将某些 URL 的用户重定向到相同的 SSL 版本)
  • maintenancemode.middleware.MaintenanceModeMiddleware 在提交和推送后部署站点时显示 503 消息
  • bambu.analytics.middleware.AnalyticsMiddleware 跨请求将分析 JavaScript 排入队列
  • bambu.enqueue.middleware.EnqueueMiddleware 允许视图和模板标签加入 CSS 和 JavaScript
  • bambu.minidetect.middleware.MiniDetectMiddleware 检测浏览器是否移动
  • nymbol.utils.middleware.UserPlanMiddleware 将用户当前使用的付款计划存储在 request 对象中(因为这控制了站点范围的权限)
  • nymbol.manager.middleware.APILegacyMiddleware 将一个特定 URL 中的 URL 模式更改为另一个(绝对与此问题无关)

【问题讨论】:

  • 这当然不是一个常见的 Django 问题。它是否与您在选项卡 B 中单击删除 cookie 的特定链接有关?您是否尝试过使用其他浏览器时问题仍然存在?您可以发布您正在使用的中间件(MIDDLEWARE_CLASSES 在您的设置文件中)吗?
  • 谢谢@knbk;在上面添加了详细信息

标签: django session cookies


【解决方案1】:

原来我遇到的问题与 Django 无关,而是由于一些不安全的图像 URL 是通过 TLS(基本上是 SSL)传递的。

这可能是对该问题的错误解释,但似乎当浏览器 - Chrome 或 Firefox - 检测到从安全 URL 引用的 http:// URL 时,它放弃了会话,所以下次我点击刷新时或单击另一个链接,我将被带到登录页面,因为我的 cookie 将不再有效。

正如我所说,它可能不完全是如何下降的,但这是非常实际的结果,并且更正这些 URL(这当然是最佳实践)完全解决了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-19
    • 1970-01-01
    • 2017-11-28
    • 2018-04-13
    相关资源
    最近更新 更多