2009-07-09 23 views
51

Tôi có một HttpHandler được chạy trên một trang khách hàng (tên miền chéo, không phải trên máy chủ IIS của chúng tôi, vv) và khi họ nhấp vào liên kết nhúng của chúng tôi, nó sẽ tắt Handler trên máy chủ của chúng tôi. Cho đến nay mọi thứ đều hoạt động bình thường.Làm thế nào để sử dụng ASP.NET Session State trong một HttpHandler?

Tôi hiện đang cố gắng sử dụng đối tượng System.Web.HttpContext.Session nhưng nó là rỗng. Tôi nghĩ rằng nó là null bởi vì chúng tôi không có một phiên cho đến khi HttpHandler của chúng tôi được gọi? Và nhiều cuộc gọi đến trình xử lý sẽ tạo một phiên mới cho mỗi cuộc gọi? Nếu đây là trường hợp MS đã vô hiệu hóa các đối tượng Session khi gọi vào một HttpHandler? bất cứ ai có thể xác nhận điều này?

Nếu đúng như vậy, bạn phải làm gì để duy trì trạng thái giữa các cuộc gọi? Một số loại đối tượng dữ liệu dựa trên SQL? Một tập tin?

TIA

Trả lời

124

Có bạn HttpHandler thực hiện IRequiresSessionState giao diện. Nó sẽ cho phép sử dụng trạng thái phiên. IRequiresSessionState có thể được tìm thấy trong không gian tên System.Web.SessionState.

+1

@ Michael sẽ không suy nghĩ về điều đó trong một triệu năm nhờ :) –

+0

Thực hiện làm việc cho tôi: Công Class BasicHandler Dụng cụ IHttpHandler Dụng cụ IRequiresSessionState –

24

Tôi nghĩ bạn phải triển khai giao diện trống IReadOnlySessionState, vì vậy ngữ cảnh sẽ được tải.

chỉnh sửa để thêm:

Theo câu trả lời Michael Morton, bạn cũng có thể thực hiệnIRequiresSessionState, mà sẽ cung cấp cho bạn viết truy cập cũng đến đối tượng Session

+2

Đối với nhiều người sử dụng HttpHandler IReadOnlySessionState là tốt nhất, ít nhất là khi người duy nhất là kiểm tra trạng thái phiên không cứu nó, nhưng lý do chính đây là tốt hơn câu trả lời là bởi vì một HttpHandler thực hiện IReadOnlySessionState hoặc IRequiresSessionState hơn là thừa hưởng (các lớp chỉ có thể kế thừa từ các lớp khác). – JackArbiter

-10

hãy thử sử dụng bối cảnh hiện nay ...

System.Web.HttpContext.Current.Session 
+0

không hoạt động, trừ khi anh ta thực hiện một trong những cả hai giao diện đánh dấu –

+1

Phiên sẽ được null mà không có IRequiresSessionState/IReadOnlySessionState – Colin

+1

xấu của tôi ... đã suy nghĩ của HttpModules. –

2
using System; 
using System.Web; 
using System.Web.SessionState; 
public class DownloadHandler : IHttpHandler, IReadOnlySessionState 
{ 
    public bool IsReusable { get { return true; } } 

    public void ProcessRequest(HttpContext context) 
    { 
     context.Response.Write(context.Session["kmx"]); 
    } 
} 
Các vấn đề liên quan