2011-09-15 30 views
11

Tôi có nhiều dự án Django chạy trên một máy chủ sử dụng gunicornnginx. Hiện tại chúng được cấu hình để chạy trên một cổng duy nhất của cùng một địa chỉ IP bằng cách sử dụng chỉ thị máy chủ trong nginx. Tất cả điều này hoạt động tốt.Cookie và trang web Django- phiên trên nhiều cổng

... 
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 
} 
... 

tôi tình cờ gặp một vấn đề khi tôi đã có 2 dự án khác nhau mở trong 2 tab và tôi nhận ra rằng tôi không thể đăng nhập vào cả hai trang web cùng một lúc (đều sử dụng được xây dựng trong Django mô hình người dùng và auth). Khi kiểm tra các cookie được lưu trong trình duyệt của tôi, tôi nhận ra rằng cookie chỉ được gắn với tên miền (trong trường hợp của tôi chỉ là một địa chỉ IP) và nó không bao gồm cổng.

Trên trang web thứ hai, tôi đã cố gắng thay đổi SESSION_COOKIE_NAME annd SESSION_COOKIE_DOMAIN, nhưng nó dường như không được làm việc và với các thiết lập hiện tại tôi thậm chí không thể đăng nhập.

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 

Tôi cần những gì để làm gì để có được cookie cho cả hai trang web hoạt động độc lập?

Trả lời

15

Chỉ cần thay đổi SESSION_COOKIE_NAME. SESSION_COOKIE_DOMAIN không hỗ trợ số cổng afaik. Vì vậy, tất cả đều giống nhau cho các ứng dụng của bạn.

+0

Đó là điều đầu tiên tôi thử. Và nó không hoạt động. Nhưng tất nhiên, sau khi bạn giới thiệu nó và tôi thử lại nó hoạt động ... Cảm ơn! Ngoài ra, tôi nghĩ rằng vấn đề này sẽ tự khắc phục khi chúng tôi nhận được thiết lập DNS nội bộ (tất cả các trang web này là các ứng dụng sử dụng nội bộ). –

2

Một giải pháp khác không yêu cầu mã hóa tên cookie khác nhau cho từng trang web là viết một phần mềm trung gian thay đổi tên cookie dựa trên cổng mà yêu cầu được đưa vào.

Here's a simple version (chỉ một vài dòng mã).

Các vấn đề liên quan