天天看點

浏覽器中的三種存儲Cookie,Session,LocalStorage

  • Cookie

      Cookie儲存在用戶端,由使用者自己銷毀

      Cookie:用戶端資訊存放對象,可以把使用者的資訊儲存在使用者的本地,不必總是通路伺服器

      Cookie用于儲存客戶浏覽器請求伺服器頁面的請求資訊,也可以用它儲存非敏感性的内容。儲存時間可以根據需要設定。如果沒有設定Cookie失效時間,它僅儲存至浏覽器關閉。如果将Cookie設定為Min Value,則表示它永不過期。Cookie存儲量受到很大限制,一般浏覽器支援最大容量為4096位元組。是以不能用來存儲大量資料。由于并非所有浏覽器都支援Cookie,并且它是以明文方式儲存的,是以最好不要儲存敏感性的内容。否則會影響網絡安全。Cookie以檔案的形式儲存的請求資訊

      Cookie的簡單應用:

//Response.Cookies["name"].Value = "Myname"; //存值
            //string myname = Response.Cookies["name"].Value; //取值
            HttpCookie cookie = new HttpCookie("mycookie"); //定義cookie對象以及名為mycookie的項
            DateTime dt = DateTime.Now; //定義時間對象
            TimeSpan ts = new TimeSpan(1, 0, 0, 0); //cookie有效作用時間,具體查msdn
            cookie.Expires = dt.Add(ts); //添加作用時間
            cookie.Values.Add("user", "your name"); //增加屬性
            cookie.Values.Add("userid", "123456");
            Response.AppendCookie(cookie); //确定寫入cookie中     
            //讀取cookie
            if (Request.Cookies["mycookie"] != null)
            {
                string temp = Convert.ToString(Request.Cookies["mycookie"].Values["user"]) + "	" + Convert.ToString(Request.Cookies["mycookie"].Values["userid"]);
                //讀全部就用Request.Cookies["mycookie"].Value)
            }
            //修改cookie
            Response.Cookies["mycookie"]["user"] = "2";
            Response.Cookies["mycookie"].Expires = DateTime.Now.AddDays(1);
            //删除cookie下的屬性
            HttpCookie mycookie = Request.Cookies["mycookie"];
            mycookie.Values.Remove("userid");
            mycookie.Expires = DateTime.Now.AddDays(1);
            Response.Cookies.Add(mycookie);
            //删除所有cookie,就是設定過期時間為現在就行了
            int cookies = Request.Cookies.Count - 1;
            for (int i = 0; i < cookies; i++)
            {
                mycookie = Request.Cookies[i];
                mycookie.Expires = DateTime.Now.AddDays(-1);
                Response.Cookies.Add(mycookie);
            }
           
  • Session

      Session 儲存在服務端,用戶端(浏覽器)關閉即銷毀(若長時間不使用 且 浏覽器未關閉的情況下, 預設自動銷毀時間為20分鐘)

      Session:使用者全局變量,對于該使用者的所有操作過程都有效

      Sessio用于儲存每個使用者的專用資訊,它的生存期是使用者持續請求時間再加上一段時間(可以在web.config中設定,預設是20分鐘)。Session中的資訊儲存在伺服器的記憶體中,當然你也可以設定它的儲存方法(如存在SQL資料庫中)。由于使用者停止使用程式後它仍然在記憶體中保持一段時間,是以使用Session對象儲存使用者資料的方法效率很低。對于小量的資料。使用Session還是一個不錯的選擇。

      Session:該對象是HttpSession類型的對象,描述一個用戶端與伺服器之間的一次通話時段,該段時間内包含用戶端的若幹次請求和伺服器的相應響應,整個時間段session對象都存在。常用來實作購物車之類的存儲目前使用者的資料。不同使用者有各自的不同session對象

      Session的簡單應用:

//Session["user"] = "mysession";//存值
            //string username = Session["user"].ToString();//取值
            Session["checkcode"] = "";
            string checkcode = Session["checkcode"].ToString();
            //儲存對象
            Test test = new Test();
            Session["test"] = test;
            //取值
            Test test1 = (Test)Session["test"];
           
  • LocalStorage

      localStorage用于持久化的本地存儲,除非主動删除資料,否則資料永遠也不會過期。

  localStorage的優勢:

  • localStorage拓展了cookie的4K限制
  • localStorage可以将第一次請求的資料直接存儲到本地,這相當于一個5M大小的針對于前端的資料庫,相比cookie可以節約帶寬,但這個卻是隻有在高版本的浏覽器在才支援的。

   localStorage的局限:

  • 浏覽器的大小不統一,并且在IE8以上的版本才支援localStorage這個屬性。

    -目前所有的浏覽器中都會把localStorage的值類型限定為string類型,這個在對我們日常比較常見的JSON對象類型需要一些轉換。

  • localStorage在浏覽器的隐私模式下面是不可讀取的。
  • localStorage本質上是對字元串的讀取,如果存儲内容多的話會消耗記憶體空間,會導緻頁面變卡。
  • localStorage不能被爬蟲抓取到。

    localStorage與Session的唯一一點差別就是localStorage屬于永久性存儲,而Session屬于當會話結束的時候,Session中的鍵值對會被清空。

  使用localStorage要注意幾點:

  • localStorage的使用也是遵循同源政策的,是以說不用的網站之間localStorage是不同的,它們之間并沒有什麼聯系。
  • 存入localStorage的資料,不管存儲的時候是什麼類型,存入到裡面之後都會被轉換成string類型,是以有時需要進行類型轉換。

  localStorage的簡單應用:

if (!window.localStorage) {
                alert("浏覽器不支援localStorage");
                return false;
            } else {
                var storage = window.localStorage;
                //三種存取值的方式,官方推薦使用setItem/getItem存取值
                //修改則是直接将對應的storage值覆寫
                //存
                storage.a = "1";
                storage["b"] = 2;
                storage.setItem("c", 3);
                //取
                var a = storage.a;
                var b = storage["b"];
                var c = storage.getItem("c");
                //删除某一個storage
                storage.removeItem("c");
                //清空storage
                storage.clear();
    //注意事項:一般我們将JSON存入localStorage中,但是localStorage會自動将localStorage轉換成字元串形式,
    //這個時候我們可以使用JSON.stringify()這個方法,來将JSON轉換成JSON字元串
                var data = {
                    name: 'myname',
                    sex: 'man'
                };
                var d = JSON.stringify(data);
                storage.setItem("data", d);
                //将JSON字元串轉換成JSON對象 
                var json = storage.getItem("data");
                var jsonObj = JSON.parse(json);
            }
           

繼續閱讀