2009-11-30 22 views
6

Vì vậy, tôi thiết lập Trạng thái phiên SQL Server bằng SQL Server 2008 và cơ sở dữ liệu tạm thời và hôm nay tôi quyết định xem xét dữ liệu trong bảng chỉ để tìm điều này trong bảng ASPStateTempApplications :SQL Server Session Nhà nước, trang trại và cấu hình IIS

AppID AppName
538.231.025/LM/W3SVC/1/root
611.758.131/LM/W3SVC/3/root
802.488.340/LM/W3SVC/4/root
-940.085.065/LM/W3SVC/4/root/webapp
685293685/lm/w3svc/5/root
1210055478/lm/w3svc/5/root/webapp

Chúng tôi có 2 máy chủ web cân bằng tải.

Khi tôi xem xét các id của ứng dụng web của cả hai máy chủ, tôi thấy web1 có app1 với id 4 và web2 có app1 có id 5. Điều tương tự cũng xảy ra với ứng dụng khác. web1 có app2 có id là 1 và web2 có app2 có id là 3.

Ý thức chung của tôi cho tôi biết rằng các máy chủ web không chia sẻ phiên làm id phiên sử dụng appid. Tôi có đúng không? Nếu vậy tại sao không phải là chi tiết nhỏ này không quá rõ ràng trong tài liệu? Tôi có nên làm cho các id phù hợp trên cả hai máy chủ web?

Trả lời

6

AppId được sử dụng trong khi tạo SessionId, để giúp tránh va chạm từ ứng dụng này sang ứng dụng khác. Nó được tạo ra bằng cách tính toán một hash của đường dẫn ứng dụng IIS.

Trong môi trường của bạn, dòng chảy có thể là một cái gì đó như thế này:

  1. Server Một tạo ra một session ID, đặt nó trong một cookie, và các cửa hàng một số dữ liệu trong phiên tương ứng (một hàng trong ASPStateTempSessions). Cột ID phiên được tạo bằng cách nối ID phiên với AppID.
  2. Máy chủ B nhận được yêu cầu có ID phiên đã tồn tại từ trước và sử dụng nó để tìm dữ liệu phiên được liên kết từ bảng ASPStateTempSessions. Nếu ID ứng dụng khác, khóa được tạo cũng sẽ khác nhau.

Tác động ròng của việc có nhiều máy chủ với AppIds khác nhau được chia sẻ các phiên họp cùng là ID được tạo ra bởi một máy chủ sẽ không va chạm với những người từ các máy chủ khác, và máy móc với AppIds khác nhau sẽ không nhìn thấy nhau phiên.

+0

+1 giải thích hay. – Saar

+0

Theo bài viết này: http://msdn.microsoft.com/en-us/library/aa478952.aspx sessionid của bảng ASPStasteTempSessions là ID ứng dụng ID phiên. Làm thế nào chắc chắn là bạn rằng ASP.NET thay đổi ID phiên của bối cảnh và sử dụng nó trên các máy chủ? –

+0

Tôi vừa xác minh với Fiddler và SSMS rằng AppId thực sự được nối vào cuối ID phiên làm khóa trong bảng ASPStateTempSessions. Tôi đã cập nhật câu trả lời của mình cho phù hợp. – RickNZ

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