[ASP.NET MVC]關於session的使用

前一陣子筆者因為工作案子需要使用ASP.NET MVC來寫網站,雖然之前沒有接觸過ASP,不過網頁後端概念是一樣的,所以邊寫邊學努力把案子完成

當然有很多架構上還是不一樣的,畢竟換個語言就是要重學一些東西,一開始遇到的就是session問題,我希望能在一個獨立class使用靜態的方法處理session,剛開始找到的資料,都只能在Action中使用session,真的很不方便,後來發現了方法可以在獨立class中取得session

System.Web.HttpContext.Current.Session["loginId"]

不過老實說,好長一大串,用起來很不方便,並且key的部分沒有統一的話,以後就維護找到崩潰了,型態不確定也是一個問題,好家在,stackoverflow是開發人員的好朋友,我找到了這一篇中的一個解法,完全符合我的需要啊,真是太神了,其中核心程式碼如下:

public class MySession
{
    // private constructor
    private MySession()
    {
      Property1 = "default value";
    }

    // Gets the current session.
    public static MySession Current
    {
      get
      {
        MySession session =
          (MySession)HttpContext.Current.Session["__MySession__"];
        if (session == null)
        {
          session = new MySession();
          HttpContext.Current.Session["__MySession__"] = session;
        }
        return session;
      }
    }

    // **** add your session properties here, e.g like this:
    public string Property1 { get; set; }
    public DateTime MyDate { get; set; }
    public int LoginId { get; set; }
}

主要原理是把自訂的物件Current存入session當中,並且只使用一個特定的key,而該物件是靜態的,所以隨時都可以從任意地方存取,第一次取得時,會自動建立好物件存入session,又因為C#物件是call by reference,所以你在修改Current時,也等於在修改session中的物件,因為都指向同一塊記憶體位置

int loginId = MySession.Current.LoginId;

string property1 = MySession.Current.Property1;
MySession.Current.Property1 = newValue;

DateTime myDate = MySession.Current.MyDate;
MySession.Current.MyDate = DateTime.Now;

這個方法解決了型態和Key值的問題,使用也很簡單,並且可以定義預設值,不用再判斷null或是該key是否存在了,只能說想出來的人真的很有巧思,也願意分享,所以我立馬就將這個方法用在專案中囉,希望對於看到這篇文章的你有點幫助

參考來源

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

Create a website or blog at WordPress.com

向上 ↑

%d 位部落客按了讚: