2009-02-17 26 views
6

Chúng tôi có một vài ứng dụng Django được triển khai trên cùng một tên miền phụ. Một vài người dùng cần phải nhảy giữa các ứng dụng này. Tôi nhận thấy rằng mỗi khi họ trả lại giữa các ứng dụng cookie phiên của họ nhận được một ID phiên mới từ Django.Cách nhận các ứng dụng Django riêng biệt trên cùng một tên miền phụ để chia sẻ cookie phiên?

Tôi không sử dụng bảng phiên Django nhiều ngoại trừ trong một quy trình làm việc phức tạp. Nếu người dùng bị trả lại giữa các ứng dụng trong khi trong luồng công việc này, họ sẽ mất phiên của họ và phải bắt đầu lại.

tôi đào thông qua các mã phiên Django và phát hiện ra rằng:

django.conf.settings.SECRET_KEY

được sử dụng để thực hiện một kiểm tra tính toàn vẹn trên phiên trên mỗi yêu cầu. Nếu kiểm tra tính toàn vẹn không thành công, một phiên mới sẽ được tạo. Nhận ra điều này, tôi đã thay đổi khóa bí mật trong mỗi ứng dụng để sử dụng cùng một giá trị, nghĩ rằng điều này sẽ cho phép kiểm tra tính toàn vẹn vượt qua và cho phép họ chia sẻ phiên Django. Tuy nhiên, nó dường như không hoạt động.

Có cách nào để thực hiện việc này không? Tôi có thiếu cái gì khác không?

Cảm ơn trước

Trả lời

12

tôi thay vào đó sẽ tư vấn cho bạn để thiết lập SESSION_COOKIE_NAME để giá trị khác nhau cho hai ứng dụng. Người dùng của bạn sẽ vẫn phải đăng nhập hai lần ban đầu, nhưng phiên của họ sẽ không xung đột - nếu họ đăng nhập vào ứng dụng A, sau đó là ứng dụng B và quay lại A, họ sẽ vẫn có phiên A của họ.

Phiên chia sẻ giữa các phiên bản Django có lẽ không phải là một ý tưởng hay. Nếu bạn muốn một số loại đăng nhập một lần, hãy nhìn vào một thứ như django-cas. Bạn vẫn sẽ có 2 phiên (như bạn nên), nhưng người dùng sẽ chỉ đăng nhập một lần.

+1

+1: di chuyển thông tin xác thực giữa các phiên Django. –

+0

Đó là một gợi ý hay - Tôi sẽ thử. Đối với SSO, đây là các ứng dụng nội bộ được tích hợp với một ứng dụng PHP kế thừa có nhiệm vụ xác thực trong phiên PHP, do đó không phải là vấn đề. Tôi thực sự chỉ cần các ứng dụng Django không stomp trên mỗi phiên khác vào thời điểm này. Thx –

+0

Điều này đã làm các trick.Bây giờ tôi cảm thấy một chút ngớ ngẩn mà tôi không tự coi mình :) –

8

Tôi đồng ý rằng các phiên chia sẻ giữa các phiên bản Django có lẽ không phải là một ý tưởng hay. Nếu bạn thực sự muốn, bạn có thể:

  • chắc chắn rằng hai ứng dụng django chia sẻ SECRET_KEY cùng
  • chắc chắn rằng hai ứng dụng django chia sẻ SeSSON_COOKIE_NAME cùng
  • đảm bảo SESSION_COOKIE_DOMAIN được thiết lập để một cái gì đó cho phép hai trường hợp chia sẻ cookie. (Nếu họ thực sự chia sẻ cùng một tên miền phụ, cài đặt hiện tại của bạn có thể là tốt.)
  • đảm bảo cả hai phiên bản Django sử dụng cùng một phiên phụ trợ (cùng cơ sở dữ liệu, cùng một thư mục tệp, cùng cấu hình memcached, v.v.)
  • đảm bảo rằng mọi thứ được đưa vào phiên làm việc có ý nghĩa trong cả hai cơ sở dữ liệu Django: ít nhất, sẽ bao gồm id người dùng, vì Django auth sử dụng để nhớ người dùng nào đã đăng nhập.

Tất cả nói rằng, tôi đã không thực sự thử tất cả những điều này, vì vậy bạn vẫn có thể gặp rắc rối!

+0

Giả sử hai cơ sở dữ liệu/mô hình riêng biệt, tôi đoán, nó cũng cần thiết để sao chép mô hình người dùng trong cả hai dự án và luôn giữ chúng đồng bộ. Và khi truy xuất các cá thể người dùng hoặc sửa đổi chúng, điều quan trọng là phải chọn thủ công cơ sở dữ liệu giống nhau (sử dụng = ...). Bảng cơ sở dữ liệu người dùng sẽ được tạo ra trong cả hai dự án, nhưng chỉ có một dữ liệu thực sự được lấp đầy. Chỉ cần suy nghĩ về vấn đề này ... bạn có đồng ý không? –

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