2011-10-31 85 views

Trả lời

23

Chúng là hiệu quả giống nhau, ở chỗ chúng sẽ truy cập vào cùng một dữ liệu Phiên.

Lý do bạn có thể gọi Session trong mã của bạn là do các trang ASP.Net theo mặc định mở rộng loại System.Web.UI.Page. Điều này có một tài sản công cộng Session. Nếu bạn nhìn vào mã cho điều này trong Reflector bạn có thể thấy rằng nó chỉ gọi HttpContext.Current.Session chính nó (thông qua tài sản riêng của nó Context).

Trong các lớp khác, bạn sẽ không có quyền truy cập vào thuộc tính đó, nhưng bạn có thể sử dụng HttpContext.Current.Session để truy cập dữ liệu phiên thay thế, miễn là bạn đang chạy trong ngữ cảnh của ứng dụng web.

+6

Vâng đối tượng các thuộc tính trả về là như nhau, nhưng nếu một phiên không tồn tại HttpContect.Current.Session sẽ trả về null trong khi Page.Session sẽ ném một HttpException. – Polymorphix

2

Không có sự khác biệt. Họ là những điều tương tự; dạng thứ hai ngắn hơn :)

2

Không có sự khác biệt. Page.Session trả về số HttpContext.Current.Session

Với điều đó đang được nói, tôi đã viết .dll hoạt động như phần mở rộng cho ứng dụng web. Các .dll không có khái niệm về Session. Trong những trường hợp này, tôi có thể truy cập vào phiên hiện tại của ứng dụng web đang sử dụng .dll của tôi bằng cách tham chiếu HttpContext.Current.Session

2

Không có sự khác biệt về hành vi. Nếu bạn đang sử dụng mã trong lớp tùy chỉnh của bạn, nơi HttpContext không có sẵn trực tiếp và muốn truy cập vào giá trị phiên hơn chúng ta sử dụng dòng mã đầu tiên, trong khi dòng thứ hai được sử dụng khi truy cập trong các lớp Page hoặc control.

8

Trên kịch bản stantard, chúng giống nhau. Sự khác biệt là câu lệnh đầu tiên cũng sẽ làm việc trong các ngữ cảnh tĩnh như một WebMethod.

+0

Đó là sự khác biệt đơn giản nhất để hiểu. –

4

Có sự khác biệt. Ví dụ thứ hai (Session) là thuộc tính của nhiều đối tượng .NET chẳng hạn như Page. Vì vậy, bạn không thể có quyền truy cập vào nó, trong hàm tạo của các đối tượng đó chẳng hạn. Tuy nhiên, cái đầu tiên (HttpContext.Current.Session), luôn sẵn sàng và theo ý của bạn (tất nhiên, sau khi phiên được tải trong Đường ống xử lý yêu cầu).

1

Một câu trả lời khá kỹ lưỡng từ Nicholas Carey https://stackoverflow.com/a/6021261/365017

"sở hữu phiên HttpApplication của thể hiện hành vi khác nhau hơn so với trong các proporty HttpContext.Current.Session. Cả hai đều sẽ trả về một tham chiếu đến dụ HttpSessionState tương tự nếu ai có sẵn Họ khác nhau về những gì họ làm khi không có phiên bản nào của HttpSessionState có sẵn cho yêu cầu hiện tại

Không phải tất cả HttpHandler đều cung cấp trạng thái phiên làm việc. IReadOnlySessionState.

HttpContext.Current.Session chỉ trả về null nếu không có phiên nào khả dụng.

Việc triển khai thực hiện thuộc tính Session của HttpApplication sẽ ném ra một HttpException với thông báo Phiên trạng thái không có sẵn trong ngữ cảnh này. thay vì trả về một tham chiếu null."

+0

cho lỗi khác một trả về null am i chính xác? – MonsterMMORPG

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