cookie和session,sessionStorage、localStorage和cookie的區別

1.cookie瀏覽器

  含義: 存儲在訪問者的計算機中的變量,即存儲在客戶端安全

  建立一個cookie服務器

    /* getCookie方法判斷document.cookie對象中是否存有cookie,如有則判斷該cookie中是否含有指定c_name的cookie,有則返回數據      沒有則返回空串 */cookie

 function getCookie(c_name){

      if (document.cookie.length>0){

        c_start=document.cookie.indexOf(c_name + "=")   //   indexOf()  返回指定字符串值在某個字符串中首次出現的位置,若是沒有出現則返回-1

        if (c_start!=-1){ 

          c_start=c_start + c_name.length+1        //  0 + 8 + 1  即username=  以後的位置 9
          c_end=document.cookie.indexOf(";",c_start)   
          if (c_end==-1) c_end=document.cookie.length
          return unescape(document.cookie.substring(c_start,c_end))         //  subtring(start,stop)用於提取字符串中介於兩個指定下標的字符     start必填,stop可選  參數都爲非負整數

             //  unescape() 對 escape() 編碼的字符串進行解碼。

        } 
      }
      return ""
    }

    /* setCookie方法將cookie名稱爲c_name的value值存入document.cookie對象中   */session

 function setCookie(c_name,value,expiredays){
      var exdate=new Date()
      exdate.setDate(exdate.getDate()+expiredays)
      document.cookie=c_name+ "=" +escape(value) + ((expiredays==null) ? "" : "; expires="+exdate.toGMTString())      //結果爲:  username= xxx;expires=xxx;

 

       // toGMTString()方法,根據格林威治時間 (GMT) 把 Date 對象轉換爲字符串,並返回結果。

      // escape(string) 函數可對字符串進行編碼,就能夠在全部計算機上讀取該字符串。
    }

    /* checkCookie()方法調用getCookie()判斷document.cookie對象中名稱爲username的cookie是否已經設置,若已經設置則顯示提示框顯示信息,反之調用setCookie()方法設置cookie */函數

 function checkCookie(){
      username=getCookie('username')
      if (username!=null && username!=""){alert('歡迎登錄 '+username+'!')}
      else {
        username=prompt('輸入用戶名:',"")
        if (username!=null && username!=""){
          setCookie('username',username,365)
        }
      }
    }

  附加:  刪除cookie   將expires設置爲過時時間便可  cookie名稱可爲空性能

    document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 GMT";網站

2.sessionui

  session依賴於cookie,它存儲在服務器端編碼

  session至關於程序在服務器上創建的一份用戶的檔案,用戶來訪的時候只須要查詢用戶檔案表就能夠了。

  HTTP協議是無狀態的,session不能依據HTTP鏈接來判斷是否爲同一客戶,所以服務器向客戶端瀏覽器發送一個名爲SESSIONID的cookie,它的值爲該Session的id。Session依據該cookie來識別是否爲同一用戶。  

應用場景

  1. 經過session累計用戶數據。例如,一個未登陸用戶訪問了京東網站,這個時候京東對其下發了一個 cookie,假設cookie的名字叫作abc,那這條記錄就是 abc=001,同時京東的後臺也生成了一個 session id, 它的值也爲 001, 001 這個客戶在 2 點、 3 點、 4 點分別添加了三件商品到購物車,這樣後臺也記錄了 session id 爲 001的用戶的購物車裏面已經有三件商品,而且只要每次客戶端 cookie 帶上來的值裏面包含session id,後臺都可以展現相應的數據,若是這個時候,在瀏覽器裏面清空 cookie,cookie 數據消失以後,後臺和客戶端沒法創建對應關係,購物車的數據就會失效了。
  2. 經過session實現單點登陸。一個用戶賬號成功登陸後,在該次session還未失效以前,不能在其餘機器上登陸同一個賬號。登陸後將用戶信息保存到session中,若是此時在另一臺機器上一個相同的賬號請求登陸,經過遍歷(遍歷的意思就是將全部session都查看一遍)Web服務器中全部session並判斷其中是否包含一樣的用戶信息,若是有,在另外一臺機器上是不能登陸該賬號的。

3.Cookie和Session區別

    一、cookie數據存放在客戶的瀏覽器上,session數據放在服務器上 

    二、cookie不是很安全,別人能夠分析存放在本地的cookie並進行cookie欺騙,考慮*到安全應當使用session 
    三、session會在必定時間內保存在服務器上,當訪問增多,會比較佔用你服務器的性能,考慮到減輕服務器性能方面,應當使用cookie 
    四、單個cookie保存的數據不能超過4K,不少瀏覽器都限制一個站點最多保存20個cookie 
    五、建議將登陸信息等重要信息存放爲session,其餘信息若是須要保留,能夠放在cookie中 
    六、session保存在服務器,客戶端不知道其中的信息;cookie保存在客戶端,服務器可以知道其中的信息 
    七、session中保存的是對象,cookie中保存的是字符串 
    八、session不能區分路徑,同一個用戶在訪問一個網站期間,全部的session在任何一個地方均可以訪問到,而cookie中若是設置了路徑參數,那麼同一個網站中不一樣路徑下的cookie互相是訪問不到的

4.sessionStorage、localStorage和cookie的區別

共同點:都是保存在瀏覽器端、且同源的 區別:     一、cookie數據始終在同源的http請求中攜帶(即便不須要),即cookie在瀏覽器和服務器間來回傳遞,而sessionStorage和localStorage不會自動把數據發送給服務器,僅在本地保存。cookie數據還有路徑(path)的概念,能夠限制cookie只屬於某個路徑下     二、存儲大小限制也不一樣,cookie數據不能超過4K,同時由於每次http請求都會攜帶cookie、因此cookie只適合保存很小的數據,如會話標識。sessionStorage和localStorage雖然也有存儲大小的限制,但比cookie大得多,能夠達到5M或更大     三、數據有效期不一樣,sessionStorage:僅在當前瀏覽器窗口關閉以前有效;localStorage:始終有效,窗口或瀏覽器關閉也一直保存,所以用做持久數據;cookie:只在設置的cookie過時時間以前有效,即便窗口關閉或瀏覽器關閉     四、做用域不一樣,sessionStorage不在不一樣的瀏覽器窗口中共享,即便是同一個頁面;localstorage在全部同源窗口中都是共享的;cookie也是在全部同源窗口中都是共享的 

相關文章
相關標籤/搜索