2009-10-29 22 views
16

Chúng tôi lưu trữ hai đối tượng trong phiên. Bằng cách nào đó, một trong những đối tượng từ một người dùng khác đã được tải vào phiên của người dùng khác. Người dùng nên không có quyền truy cập vào dữ liệu cụ thể này và ngay sau khi họ thấy họ biết điều gì đó rất sai.Trộn phiên ASP.NET bằng cách sử dụng StateServer (SCARY!)

Chúng tôi có bằng chứng trực quan về dữ liệu đã được trình bày cho anh ấy và có chắc chắn không có cách nào nó có thể xảy ra trừ khi phiên bị trộn lẫn. Đây là một tình huống rất đáng sợ mà chúng ta không thể tìm ra (chúng ta không thể tái tạo nó). Câu trả lời duy nhất cho chúng ta là đổ lỗi cho ASP.NET StateServer để trộn các biến session lên, điều này hoàn toàn không được chấp nhận và đặt chúng ta vào một vị trí tồi.

Ứng dụng của chúng tôi là các ứng dụng ASP.NET 2.0 chạy trên Windows Server 2003 với IIS6, sử dụng chế độ phiên StateServer cookieless="false" và FormsAuthentication.

Có ai khác có vấn đề này không? Làm thế nào chúng ta có thể giải quyết nó?

+0

Tôi đã thấy điều này, nhưng trong .Net 1.1. t được cho là cố định trong 2.0. Tôi có một số câu hỏi trước khi tôi cố gắng đăng câu trả lời. Câu hỏi đầu tiên, bạn đang sử dụng phiên không nấu ăn? – David

+0

Cảm ơn! Có, không nấu ăn (nó nói trong câu hỏi). –

+0

Xin lỗi ... Không đọc được. Vì việc sử dụng các phiên không có nghĩa là SessionID được bao gồm trong URL dưới dạng tham số chuỗi truy vấn, bạn đã xác minh rằng Tham số chuỗi truy vấn SessionID của URL có khác nhau giữa hai người dùng khi điều này xảy ra không? – David

Trả lời

12

Chúng tôi đã gặp vấn đề này chính xác trong công ty trước đây của tôi và mất 3 tuần để gỡ lỗi nó. ASP.NET đã đưa ra trạng thái phiên của người dùng của người khác. Nó đã thực sự không thể sao chép trong một môi trường gỡ lỗi.

Khắc phục khi chúng tôi tìm thấy nó chỉ là một cái gì đó trong web.config. Tôi không hoàn toàn nhớ nó, vì vậy tôi đã dành một số thời gian googling. Tôi tin rằng vấn đề có liên quan đến bộ nhớ đệm đầu ra. Hãy xem bài viết này trong phần "Phiên và lưu trữ đầu ra".

http://download.microsoft.com/download/3/a/7/3a7fa450-1f33-41f7-9e6d-3aa95b5a6aea/MSDNMagazineJuly2006en-us.chm (bài viết có tựa đề Giữ Sites Chạy trơn tru bằng Tránh Những 10 Common ASP.NET cạm bẫy bởi Jeff Prosise trong tháng 7 năm 2006 ấn bản của tạp chí MSDN)

Nghe có vẻ giống như kịch bản của bạn, sau đó sửa chữa có thể chỉ vô hiệu hóa tùy chọn enableKernelOutputCache trong web.config.

Chúc may mắn.

+0

Tôi tin rằng bạn là chính xác! Chúng tôi đã thực sự có bộ nhớ đệm đầu ra được bật trên biểu mẫu web * one * và biểu mẫu là nguyên nhân chịu trách nhiệm về việc điền biến phiên khác nhau của chúng tôi. Bạn là một vị thánh, một học giả, một quý ông, một thiên tài, và tôi không thể cảm ơn đủ! –

+0

+1. Mặc dù Josh nói chỉ có một biến được đổi chỗ, chứ không phải toàn bộ phiên, như được chỉ ra trên liên kết của bạn. – wtaniguchi

+0

Để làm rõ, tôi chỉ có * bằng chứng * rằng một biến đã được hoán đổi. –

5

Tìm lỗi trong mã của riêng bạn trước tiên - đây là giải thích khả dĩ nhất. Ví dụ. sử dụng các trường tĩnh hoặc bộ nhớ dùng chung khác chẳng hạn như bộ nhớ cache ASP.NET cho dữ liệu người dùng cụ thể.

+0

Tôi chỉ dành mười ngày cuối cùng để làm việc này. Tôi nhấn mạnh từ "chắc chắn" trong câu hỏi của tôi vì một lý do. Tin tôi đi, mã của chúng tôi là chống đạn. –

+0

Ngoài ra, ứng dụng này đã được sản xuất trong nhiều năm và chúng tôi đã chỉ gặp phải vấn đề này một lần. –

+0

+1 Mỗi lần tôi nhìn thấy thứ gì đó giống như những gì Josh đang mô tả, đó là thủ phạm. – kemiller2002

0

Đã xảy ra bao nhiêu lần? Bạn có kiểm tra người dùng đang sử dụng trình duyệt hoặc gửi liên kết cho nhau bằng id phiên không? Một cách để kiểm tra chắc chắn về lỗi Máy chủ của Nhà nước là chuyển sang trình quản lý phiên khác, dự phòng trong proc nếu bạn có thể hoặc sử dụng SQL Server nhưng sẽ tốt hơn nếu tìm cách tạo lại lỗi trước tiên. có thể kiểm tra nó.

+0

Nó chỉ xảy ra một lần. Trình duyệt trở lại chắc chắn không phải là nó, bởi vì xác thực người dùng sẽ không cho phép truy cập vào dữ liệu này tại bất kỳ điểm nào. Không có cách nào họ đang làm bất cứ điều gì giống như hack ID phiên, hoặc, người dùng của chúng tôi là các doanh nhân lớn tuổi thậm chí không biết một phiên là gì. –

3

Câu trả lời có thể có - báo cáo tương tự được báo cáo bằng cách sử dụng trạng thái phiên không nấu.

session showing something wrong

Edit - Thêm

Một câu trả lời có thể:

An ASP.NET page is stored in the HTTP.sys kernel cache in IIS 6.0 when the ASP.NET page generates an HTTP header that contains a Set-Cookie response

+0

David, tôi đã sai. Chế độ phiên KHÔNG được nấu. –

+0

+1 vì liên kết thứ hai được chỉnh sửa có vẻ đầy hứa hẹn. – GBegen

0

Cả hai người dùng đã vượt qua đều có thể sử dụng cùng một proxy cache không? Nếu có, thì một người dùng có thể thấy dữ liệu được lưu vào bộ nhớ cache cho một người dùng khác nếu các URL phù hợp, đặc biệt nếu proxy không hoạt động tốt.

Đây có phải là vấn đề chính với dự án Google Web Accelerator (hiện đã ngừng hoạt động) không?

0

Đã xảy ra sự cố này, hóa ra là thuộc tính OutputCache trên một phần xem.

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