【问题标题】:django www vs non-www issue with middleware authenticationdjango www 与非 www 的中间件身份验证问题
【发布时间】:2011-06-14 15:58:46
【问题描述】:

我的 Django 应用程序的行为一直不一致。

如果我不带 www 登录,然后在前面加上 www,则它没有经过身份验证,以及所有这些组合。 (www.mydomain.com 和 mydomain.com 在身份验证方面就像不同的网站)

如果认证码很重要,我这里根据教程写了一个中间件:http://onecreativeblog.com/post/59051248/django-login-required-middleware

到目前为止,我已经解决了强制附加 www 的问题,使用 PREPEND_WWW = True,但我仍然想了解这个问题;)

有人知道可能发生了什么吗? 提前致谢!

【问题讨论】:

    标签: django authentication django-middleware


    【解决方案1】:

    Zaha Zorg 所说:默认情况下,来自 Django 的 Cookie 不适用于预先添加的 www 和非 www 域。

    但是,这里更深层次的问题是,您允许网站的 www 和非 www 域提供相同的内容。除了在两者之间分配流量会带来明显的 SEO 后果外,您还会遇到此类问题。处理此问题的正确方法是将所有流量从一个重定向到另一个(无论您喜欢哪个)。你找到的PREPEND_WWW 设置非常适合这个。相反(强制所有流量到非 www),建议只在服务器配置级别进行重写,例如 Apache 或 Nginx。

    【讨论】:

      【解决方案2】:

      你需要看https://docs.djangoproject.com/en/dev/ref/settings/?from=olddocs#session-cookie-domain

      SESSION_COOKIE_DOMAIN 默认值:无

      用于会话 cookie 的域。将此设置为跨域 cookie 的字符串,例如“.lawrence.com”,或将 None 用于标准域 cookie。请参阅如何使用会话。

      【讨论】:

        【解决方案3】:

        可能是 cookie 依赖于服务器的主机名吗?这可以解释为什么两个域名被认为是不同的。

        【讨论】:

          猜你喜欢
          • 2012-05-16
          • 2011-05-15
          • 2013-03-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-06-19
          • 2011-07-03
          • 1970-01-01
          相关资源
          最近更新 更多