[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(); }
留言
張貼留言