django www与中间件身份验证的非www问题

时间:2011-06-14 15:58:47

标签: django authentication django-middleware

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

如果我在没有www登录,然后在www之前登录,则未经过身份验证,以及其所有组合。 (www.mydomain.com和mydomain.com就auth而言就像不同的网站一样)

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

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

有没有人知道可能会发生什么? 提前谢谢!

3 个答案:

答案 0 :(得分:4)

Zaha Zorg说:Django的Cookie默认不适用于前置www和非www域。

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

答案 1 :(得分:1)

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

  

<强> SESSION_COOKIE_DOMAIN   默认值:无

     

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

答案 2 :(得分:1)

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