The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

在 HttpHandler 中使用 Session 的注意事項

在寫 HttpHandler 或 Generic Handler 的時候,如果要使用 Session 物件的話,在 Visual Studio 中你可以很輕易的透過 Intellisense 使用 context. 時取得 Session 物件,但是你會發現這個物件會傳的值永遠都是 null,所以你是無法取得或設定 Session 資料的,如果要在 HttpHandler 中使用 Session 的話,其 HttpHandler 的類別一定要繼承 System.Web.SessionState.IRequiresSessionState 介面(讓 context.Session 可讀可寫)或 System.Web.SessionState.IReadOnlySessionState 介面(讓 context.Session 唯讀),繼承這個介面不需要實做任何方法(Methods),只要單純的將介面繼承上去即可。

底下是範例程式片段:

[code:c#] 

using System.Web;
using System.Web.SessionState;

public class TestHandler : IHttpHandler, IRequiresSessionState
{
    #region IHttpHandler Members

    bool IHttpHandler.IsReusable
    {
        get { return false; }
    }

    void IHttpHandler.ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "text/plain";

        context.Response.Write(context.Session["Email"]);
    }

    #endregion
}

[/code]

因為使用 Session 對主機來說多少會造成一些小負擔,所以如果你的 HttpHandler 不需要寫入 Session 的話,建議你只要繼承 System.Web.SessionState.IReadOnlySessionState 介面就好,使用這個介面就只能對 Session 進行「唯讀」處理。