2008-11-07 31 views
12

Tôi có một ứng dụng ở đâu, trong quá trình sử dụng các ứng dụng, người dùng có thể nhấp vào từTôi làm cách nào để chia sẻ phiên trên nhiều tên miền phụ trong ASP.NET?

virginia.usa.com 

để

newyork.usa.com 

Vì tôi không muốn tạo ra một phiên làm việc mới mỗi khi người dùng chuyển từ tên miền phụ này sang tên miền phụ khác, cách tốt nhất để chia sẻ thông tin phiên trên nhiều tên miền phụ là gì?

Trả lời

35

Bạn gắn thẻ này với ASP.NET và IIS, vì vậy tôi sẽ cho rằng đó là môi trường của bạn. Hãy chắc chắn rằng bạn có điều này trong web.config của bạn:

<httpCookies domain=".usa.com"/> 

Nếu 2 tên miền phụ của bạn ánh xạ đến cùng một ứng dụng, thì bạn đã hoàn tất. Tuy nhiên, nếu chúng là các ứng dụng khác nhau, bạn sẽ cần phải thực hiện một số công việc bổ sung, như sử dụng lưu trữ Session dựa trên SQL Server (và hack các thủ tục được lưu trữ để đảm bảo tất cả các ứng dụng chia sẻ cùng một dữ liệu phiên) hoặc với HttpModule để chặn tên ứng dụng , kể cả với cookie được chia sẻ và cùng một khóa máy, 2 ứng dụng sẽ vẫn sử dụng 2 cửa hàng khác nhau cho dữ liệu phiên của chúng.

+0

Cảm ơn rất nhiều Matt! Chúng tôi đã sử dụng [giải pháp này] (http://stackoverflow.com/a/2174338/177710) trước đây nhưng nó giữ OutputCaching không hoạt động. Giải pháp của bạn làm cho OutputCache của chúng tôi cuối cùng làm việc: -D – Oliver

+2

Tôi đã thử điều này trên localhost của tôi (với tên miền phụ trong tập tin host của tôi) và nó không hoạt động. Tôi có thể kéo lên các tên miền phụ tốt, nhưng, đi từ một đến các kết quả khác trong phiên bị mất và người dùng phải đăng nhập lại. Bất kỳ ý tưởng? – Marc

+0

Matt OMG rằng một dòng mã đã lưu tôi vào tuần trước ...... –

0

Nếu bạn đang sử dụng PHP, một cuộc tấn sẽ được thực hiện một chút bao gồm kịch bản (hoặc hai) phải làm như sau:

1 Serialize của bạn $ _SESSION mảng 2 đèo rằng chuỗi như một đầu vào ẩn, tạo tất cả các liên kết của bạn tới các nút đó dưới dạng riêng biệt bằng POST. 3 Cũng bao gồm một đầu vào ẩn boolean để cho kịch bản của bạn biết liệu nó cần sử dụng phiên hiện tại hoặc unserialize $ _POST ['session'] 4 Triển khai điều này trên trang web của bạn, gọi những điều thích hợp

Tôi sẽ không làm điều này nếu thực sự có một cách bị xử phạt để chuyển một phiên. Tôi hy vọng bạn ít nhất đã cân nhắc việc sử dụng cookie.

0

Tôi không nghĩ rằng các tên miền phụ khác nhau trong và của chính họ buộc các phiên khác nhau. Cả hai URL mà bạn đưa ra làm ví dụ đều có thể trỏ đến cùng một ứng dụng trong IIS.

Có vẻ như bạn có các máy chủ khác nhau hoặc ít nhất các trang web khác nhau trong IIS cho từng tên miền phụ. Cách tốt nhất để lưu trữ trạng thái liên tục như thế này là trong một cơ sở dữ liệu trung tâm. Tôi thấy dịch vụ Profile trong ASP.NET rất hữu ích cho mục đích này.

Hy vọng điều đó sẽ hữu ích.

+0

Vấn đề là với cookie phiên trong trình duyệt, tên miền bị ràng buộc –

3

Theo dõi phiên của riêng bạn và sử dụng cookie có cài đặt miền thích hợp, ví dụ: .usa.com.

Hoặc, nếu bạn đang sử dụng PHP, tôi tin rằng có một cài đặt để thay đổi cài đặt miền mặc định của cookie phiên mà nó sử dụng, điều đó cũng có thể hữu ích.

Các thiết lập bạn đang tìm kiếm là:

session.use_cookies = 1 
session.use_only_cookies = 1 
session.cookie_domain = .usa.com 
0

Câu trả lời của Matt chắc chắn là cách để đi nếu bạn có nhiều tên miền phụ trỏ vào cùng một ứng dụng IIS (chính xác là tình huống hiện tại của tôi, sử dụng ký tự đại diện DNS và sau đó thực hiện 'ngửi' trên đầu nhận).

Tuy nhiên, tôi muốn thêm một cái gì đó mà tôi có kinh nghiệm trong trường hợp bất cứ ai đang tìm kiếm rằng điều này không làm việc cho họ.Thiết lập dòng httpCookies một mình đã không làm điều đó cho tôi, tôi đã phải thêm một mục nhập machineKey vào tệp web.config của tôi:

machineKey decryptionKey = "12 ... D1" validationKey = "D7..8B"

Riêng lẻ kể từ khi tôi không trong thiết lập trang trại (trừ khi AWS/EC2 hoạt động hiệu quả như vậy) .. Ngay sau khi tôi làm điều này, nó hoạt động như một nhà vô địch.

3

Gần đây tôi đã thực hiện điều này và học được cách khó khăn. Localhost thực sự được coi là một TLD. Tên miền cookie yêu cầu ít nhất một tên miền cấp hai - test.com. Nếu bạn muốn cookie hoạt động cho miền và tất cả tên miền phụ, tiền tố có dấu '.' - .test.com.

Khi chạy/gỡ lỗi cục bộ, đặt miền của máy chủ cục bộ sẽ không thành công và sẽ không thành công ngay cả khi tên miền được đặt chính xác vì studio trực quan sử dụng localhost theo mặc định.

Máy chủ lưu trữ cục bộ mặc định này có thể được thay đổi trong thuộc tính dự án để dự án thực sự chạy tại miền cookie test.com. Về cơ bản, nếu địa chỉ trong trình duyệt phù hợp, bạn có thể làm cho nó hoạt động.

Sự cố của tôi được ghi lại ở đây: Setting ServiceStack Cookie Domain in Web.Config Causes Session Id to Change on Every Request

Hy vọng điều này sẽ hữu ích.

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