[C#] 設定 與 取得 Cookie

在寫Web的時候,如果有遇到存參數的情境,若非權限相關的資訊,儘量能存在client端,就存在client端,畢竟Server的空間也有限,所以能省則省。那麼這時候對Cookie做設定與取得就會變成常態,因此建議可以寫個Extension來做處理。

範例:

1.建立一個Controller-Extension

/// <summary>
    /// Controller-Extension
    /// </summary>
    public static class ControllerExtension
    {
        /// <summary>
        /// 設定 Cookice
        /// </summary>
        /// <param name="controller"></param>
        /// <param name="cookieName"></param>
        /// <param name="data">object</param>
        /// <param name="timeOutMin">time out 時間(單位:分)</param>
        public static void SetCookice(this Controller controller, string cookieName, object data, int? timeOutMin = null)
        {
            var js = new JavaScriptSerializer();
            var cookie = new HttpCookie(cookieName)
            {
                Value = js.Serialize(data),
                // 設定預設路徑 避免Cookie自行設定路徑
                Path = "/"
            };
            if (timeOutMin != null)
            {
                // 設定過期時間
                cookie.Expires = DateTime.Now.AddMinutes((int)timeOutMin);
            }
            // 寫到用戶端
            controller.Response.Cookies.Add(cookie);
        }

        /// <summary>
        /// 取得 Cookice
        /// </summary>
        /// <typeparam name="T">泛型</typeparam>
        /// <param name="controller"></param>
        /// <param name="cookieName"></param>
        /// <returns></returns>
        public static T GetCookice<T>(this Controller controller, string cookieName)
        {
            var js = new JavaScriptSerializer();

            var result = controller.Request.Cookies[cookieName];

            if (result is null)
            {
                return default(T);
            }

            return js.Deserialize<T>(result.Value);
        }

    }

2.在Controller的使用方法

  public ActionResult Index()
        {
            //測試儲存資料
            string test = "TestValue";
            //設定Cookie
            this.SetCookice("Test", test);
            //取得Cookie
            var value = this.GetCookice<string>("Test");
            return View();
        }    

3.結果




留言

這個網誌中的熱門文章

[Visual Studio]位於網際網路或是限制區域上 或是檔案上標有 web 字樣 所以無法處理該檔案。若希望處理這些檔案 請移除 web 字樣。

[IIS] IIS執行時,發生拒絕存取路徑 問題

[windows] xcopy 備份至 「網路磁碟機」