2013-01-06 28 views
32

Tôi thấy một số câu hỏi (HereHere) nhưng chúng không trả lời được câu hỏi của tôi. Tôi đang cố gắng gọi Ajax bằng cách sử dụng "ajax.ashx" tệp và trong chức năng truy cập Phiên. Vì một lý do nào đó, giá trị của đối tượng Session chính nó là null.HttpContext.Current.Session is null in Ashx file

Sử dụng ví dụ:

Session = HttpContext.Current.Session // This is null 

Hoặc:

public virtual void ProcessRequest(HttpContext context) 
{ 
    System.Web.SessionState.HttpSessionState Session = context.Session; 
    // This is null 
} 

Trong Web.config:

<sessionState timeout="1800"></sessionState> 
+0

Bản sao có thể có của http://stackoverflow.com/questions/2156524/asp-net-session-is-null-in-ashx-file, nhưng điều này cũng có câu trả lời và nhận xét tốt. – goodeye

Trả lời

70

Bạn phải thêm vào xử lý các IRequiresSessionState của bạn trên tờ khai về nó như :

public class YourHandleName : IHttpHandler, IRequiresSessionState 
{ 
... 

theo mặc định các trình xử lý không được kết nối với phiên để giữ chúng ở mức tối thiểu, bằng cách thêm IRequiresSessionState bạn đính kèm chúng với phiên.

+0

Lưu ý rằng điều này có thể được thừa kế, nếu tất cả các lớp .ASHX.CS của bạn kế thừa từ cùng một lớp và lớp đó có giao diện IRequiresSessionState, bạn cũng sẽ có thể truy cập vào phiên hiện tại trong mỗi trình xử lý. –

+2

@StevendeSalas Ok, nhưng chỉ cho kiến ​​thức của bạn, tốt hơn là tránh phiên nếu bạn có thể, và đặc biệt là trên trình xử lý, bởi vì trang hoặc trình xử lý yêu cầu phiên là khóa toàn bộ cuộc gọi trang web cho đến khi kết thúc http://stackoverflow.com/ Câu hỏi/11629600/không-asp-net-web-forms-ngăn chặn-một-double-click-submit/11629664 # 11629664 – Aristos

+0

Cảm ơn thông tin, luôn luôn có điều gì đó mới mẻ để tìm hiểu –

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