<tip id='1240' />

Truy xuất thông tin Session trong file ashx

Theo mặc định khi tạo một file Generic Handler (*.ashx) thì khi bạn truy xuất đến context.Session sẽ nhận giá trị null. Do vậy bạn không thể truy xuất tới các thông tin lưu trữ trên Session được.

File ashx mặc định

public class X : IHttpHandler
{
    public void ProcessRequest (HttpContext context)
    {
        // context.Session == null
    }

    public bool IsReusable {
        get {
            return true;
        }
    }
}

File ashx với Session chỉ đọc

Implement thêm interface System.Web.SessionState.IReadOnlySessionState

public class X : IHttpHandler, System.Web.SessionState.IReadOnlySessionState
{
    public void ProcessRequest (HttpContext context)
    {
        // context.Session != null
        // abc = context.Session["abc"]  // được
        // context.Session["abc"] = abc  // lỗi
    }

    public bool IsReusable {
        get {
            return true;
        }
    }
}

File ashx với Session cho phép đọc/ghi

Implement thêm interface System.Web.SessionState.IRequiresSessionState

public class X : IHttpHandler, System.Web.SessionState.IRequiresSessionState
{
    public void ProcessRequest (HttpContext context)
    {
        // context.Session != null
        // abc = context.Session["abc"]  // được
        // context.Session["abc"] = abc  // được
    }

    public bool IsReusable {
        get {
            return true;
        }
    }
}

 
Các interface: IReadOnlySessionState, IRequiresSessionState chỉ cần khai báo, không cần implement gì thêm vì chúng thuộc loại “marker interfaces”, không quy định phương thức nào cả.

Khi trích dẫn bài viết từ tek.eten.vn, xin vui lòng ghi rõ nguồn. Chúng tôi sẽ rất cảm ơn bạn!