2010/07/30

[ASP.Net] Session.IsNewSession 與 Session.SessionID

在微軟的 MSDN 中有 Asp.Net 的 Session 說明:
http://msdn.microsoft.com/zh-tw/library/system.web.sessionstate.ihttpsessionstate_members(VS.80).aspx
其中 SessionID 與 IsNewSessiont 的說明如下:
  • IsNewSession: 取得值, 指出工作階段是否以目前要求建立.
  • SessionID: 取得工作階段的唯一工作階段識別項.

看起來, 如果要紀錄同一個 Session 的行為, 可以透過這兩個屬性去完成.
不過, 看看以下的測試:
  1. 建立一個網站的專案, 結構如下圖:
    網站結構
  2. 在 Default.aspx.cs 裡, 寫入如下的測試: 只是輸出 Session 的 IsNewSession 和 SessionID
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write("IsNewSession: " + Session.IsNewSession);
            Response.Write("<br />");
            Response.Write("SessionID: " + Session.SessionID);
        }
    }
  3. 執行這個專案, 看一下 Default.aspx 頁的結果:
    第一次執行
    在瀏覽器上進行重新整理 (按 F5), 再看一次結果:
    重新整理
  4. 怪怪, 怎麼都是新的 Session 和新的 SessionID. 明明瀏覽器沒有關掉再開, 只是重新整理就變新的 Session !?
解決方式: 加入 Global.asax 檔
  1. 在專案上按右鍵 -> 選取 "加入新項目".
  2. 選擇 "全域應用程式類別" -> 按下 "加入".
  3. 再執行一次 Default.aspx 頁, 第一次如下圖:
    加入Global.asax後,第一次執行
    按 F5 進行重新整理, 結果如下圖:
    加入Global.asax後,重新整理
  4. Great~ 改好了, 差了個 Global.asax 檔, 就差很多.

沒有留言: