2010-07-09 28 views
6

Tôi có hai ứng dụng giống hệt nhau được thiết lập trên IIS trên các thư mục ảo khác nhau (tôi đã thực hiện một số giải pháp để đảm bảo rằng cả hai đều có cùng tên ứng dụng). Có cách nào để chia sẻ id phiên trên hai ứng dụng web asp.net?Làm thế nào để duy trì cùng một id phiên trên nhiều ứng dụng web trong ASP.NET

Vì tôi đang lưu phiên trong StateServer nên cả hai đều nhận cùng một dữ liệu phiên, tuy nhiên, một id phiên khác nhau được tạo mỗi khi tôi chuyển từ ứng dụng sang ứng dụng b. Điều này cũng không xảy ra trong một kịch bản cân bằng tải? Khi tôi truy cập www.test.com, nó sẽ chuyển hướng yêu cầu đó đến máy chủ a và sau đó nếu tôi nhấn lại nó, nó sẽ chuyển đến máy chủ b, nhưng vì đó là một ứng dụng web khác, nó sẽ tạo id phiên mới ?

+0

Chỉ cần ném vào cơ sở dữ liệu. Bạn đang cúi xuống phía sau để đáp ứng các giới hạn của phiên. –

+0

Cơ sở dữ liệu sẽ có cùng một vấn đề trừ khi tôi áp dụng giải pháp thay thế. Vì đó là hai ứng dụng khác nhau trong DB, nó sẽ có 2 phiên riêng biệt. –

+0

Bạn hiểu sai ý kiến ​​của tôi. Thay vì sử dụng phiên * *, hãy đặt bất kỳ dữ liệu liên tục nào bạn yêu cầu trong cơ sở dữ liệu chung. Phiên, và cookie, được thiết kế để giữ cho các ứng dụng không bị lẫn lộn với nhau. Đây là một trong nhiều thứ mà cơ sở dữ liệu rất tốt. –

Trả lời

7

Trước tiên, định cấu hình phần tử sessionState trong web.config của bạn để sử dụng cookieName = "SOME_COOKIE_NAME_HERE" trong cả hai ứng dụng.

Sau đó, chỉ cần đảm bảo các url có cùng TLD (tên miền cấp cao nhất), tức là app1.mydomain.com và app2.mydomain.com và bạn sẽ có thể xử lý sự kiện Session_Start trong Global.asax và đặt mã này:

HttpCookie cookie = new HttpCookie("SOME_COOKIE_NAME_HERE", Session.SessionID.ToString()); 
    cookie.Expires = DateTime.Now.AddMinutes(20); 
    cookie.Domain = "*.mydomain.com"; 
    cookie.HttpOnly = true; 
    Response.SetCookie(cookie); 

Ngoài ra, tôi khuyên bạn nên sử dụng Chế độ SessionState SqlServer.

+0

Điều này cũng có hoạt động với chế độ phiên StateServer không? –

+0

Tôi không hiểu tại sao không. –

+0

Thú vị. Sau khi áp dụng thay đổi này, tôi nhận được id phiên mới cho mỗi yêu cầu. Đây là mã Global.asax của tôi: \t trống session_start (object sender, EventArgs e) { \t \t \t HttpCookie Cookie = new HttpCookie ("SessionCookie", Session.SessionID.ToString()); \t \t cookie.Expires = DateTime.Now.AddMinutes (20); \t \t cookie.Domain = "* .keivantest.com "; \t \t cookie.HttpOnly = true; \t \t Response.SetCookie (cookie); \t} Dưới đây là cấu hình web.config của tôi: \t \t

-1

Mục tiêu của bạn là chia sẻ trạng thái phiên giữa 2 ứng dụng, không chỉ là ID phiên? Tôi tin rằng StateServer cũng sử dụng đường dẫn ứng dụng cũng như SessionID để lưu trữ dữ liệu, vì vậy ngay cả khi SessionID là như nhau, bạn vẫn sẽ không thể chia sẻ dữ liệu. Bạn có thể phải viết mô-đun phiên của riêng bạn.

Tải ứng dụng web cân bằng không có vấn đề này vì đường dẫn ứng dụng giống nhau giữa các thành viên cụm.

+0

Bạn chính xác. Tôi đang sử dụng một httpmodule để đặt cùng một tên ứng dụng cho cả hai ứng dụng với cùng một giá trị. –

+0

Anh ấy nói anh ấy gặp rắc rối khi lấy tên ứng dụng giống nhau –

1

Ban đầu tôi gặp phải vấn đề tương tự. Những gì tôi đã làm là, tôi vượt qua id jsession từ mỗi tên miền. Ý tôi là, Nếu người dùng truy cập vào domain1.com, hãy đặt cùng một id phiên cho domain2.com từ iframe. và ngược lại. Với điều này, bạn có thể duy trì cùng một phiên trên nhiều tên miền.

Bạn cần kiểm tra tác động trên nhiều máy chủ qua mạng có bộ cân bằng tải.

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