Django会话cookie和多个端口上的站点

时间:2011-09-15 15:26:56

标签: django cookies

我使用gunicornnginx在一台服务器上运行多个Django项目。目前,它们均配置为使用nginx中的server指令在同一IP地址的唯一端口上运行。这一切都很好。

...
server {
    listen 81;
    server_name my.ip.x.x;
    ... #static hosting and reverse proxy to site1
}
server {
    listen 84;
    server_name my.ip.x.x;
    ... #static hosting and reverse proxy to site2
}
...

当我在2个标签中打开2个不同的项目时,我遇到了一个问题,我意识到我无法同时登录这两个站点(都使用内置的Django User模型和auth)。在检查我浏览器中保存的cookie时,我意识到cookie只绑定了域名(在我的例子中只是一个IP地址)而且它不包括端口。

在第二个网站上,我尝试更改SESSION_COOKIE_NAMESESSION_COOKIE_DOMAIN,但它似乎无法正常工作,使用这些当前设置我甚至无法登录。

SESSION_COOKIE_DOMAIN = 'my.ip.x.x:84'  #solution is to leave this as default
SESSION_COOKIE_NAME = 'site2'           #just using this works 
SESSION_COOKIE_PATH = '/'               #solution is to leave this as default

#site1 is using all default values for these

如果两个网站的Cookie都是独立运作,我需要做些什么?

2 个答案:

答案 0 :(得分:17)

只需更改SESSION_COOKIE_NAME即可。 SESSION_COOKIE_DOMAIN不支持端口号afaik。所以它们对你的应用程序来说都是一样的。

答案 1 :(得分:3)

另一个不需要为每个站点硬编码不同cookie名称的解决方案是编写一个中间件,根据请求所在的端口更改cookie名称。

Here's a simple version(只需几行代码)。