2011-09-15 42 views
11

我有一个服务器上运行的多个Django项目使用gunicornnginx。目前,它们都配置为使用nginx中的服务器伪指令在同一IP地址的唯一端口上运行。所有这些工作正常。Django会话Cookie和多个端口上的站点

... 
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用户模型和AUTH)。在检查保存在我的浏览器中的cookie后,我意识到cookie只绑定了域名(在我的情况下只是一个ip地址),并且不包含端口。

在第二现场,我试图改变SESSION_COOKIE_NAME annd SESSION_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 

我需要做什么来为两个独立工作的网站获取cookies吗?

回答

15

只需更改SESSION_COOKIE_NAMESESSION_COOKIE_DOMAIN不支持端口号afaik。所以它们对于你的应用程序都是一样的。

+0

这是我第一次尝试。它不起作用。但是,当然,在你推荐它之后,我再试一次它可以工作......谢谢!另外,我认为一旦我们获得内部DNS设置(所有这些网站都是内部使用应用程序),这个问题就会得到解决。 –

2

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

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