• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    Javascript本地存儲小結(jié)

    來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-27 20:31:27
    文檔

    Javascript本地存儲小結(jié)

    Javascript本地存儲小結(jié):1. 各種存儲方案的簡單對比Cookies:瀏覽器均支持,容量為4KBUserData:僅IE支持,容量為64KBFlash:100KB,非HTML原生,需要插件支持Google Gears SQLite :需要插件支持,容量無限制LocalStorage:HTML5,容量為5MSesstionStor
    推薦度:
    導(dǎo)讀Javascript本地存儲小結(jié):1. 各種存儲方案的簡單對比Cookies:瀏覽器均支持,容量為4KBUserData:僅IE支持,容量為64KBFlash:100KB,非HTML原生,需要插件支持Google Gears SQLite :需要插件支持,容量無限制LocalStorage:HTML5,容量為5MSesstionStor

    1. 各種存儲方案的簡單對比

    Cookies:瀏覽器均支持,容量為4KB

    UserData:僅IE支持,容量為64KB

    Flash:100KB,非HTML原生,需要插件支持

    Google Gears SQLite :需要插件支持,容量無限制

    LocalStorage:HTML5,容量為5M

    SesstionStorage:HTML5,容量為5M

    globalStorage:Firefox獨有的,F(xiàn)irefox13開始就不再支持這個方法

    UserData僅IE支持, Google Gears SQLite需要插件,F(xiàn)lash已經(jīng)伴隨著HTML5的出現(xiàn)漸漸退出了歷史舞臺,因此今天我們的主角只有他們?nèi)齻€:Cookie,LocalStorge,SesstionStorge;

    2. Cookie

    作為一個前端和Cookie打交道的次數(shù)肯定不會少了,Cookie算是比較古老的技術(shù)了1993 年,網(wǎng)景公司雇員 Lou Montulli 為了讓用戶在訪問某網(wǎng)站時,進一步提高訪問速度,同時也為了進一步實現(xiàn)個人化網(wǎng)絡(luò),發(fā)明了今天廣泛使用的 Cookie。

    2.1 Cookie的特點

    我們先來看下Cookie的特點:

    1)cookie的大小受限制,cookie大小被限制在4KB,不能接受像大文件或郵件那樣的大數(shù)據(jù)。

    2)只要有請求涉及cookie,cookie就要在服務(wù)器和瀏覽器之間來回傳送(這解釋為什么本地文件不能測試cookie)。而且cookie數(shù)據(jù)始終在同源的http請求中攜帶(即使不需要),這也是Cookie不能太大的重要原因。正統(tǒng)的cookie分發(fā)是通過擴展HTTP協(xié)議來實現(xiàn)的,服務(wù)器通過在HTTP的響應(yīng)頭中加上一行特殊的指示以提示瀏覽器按照指示生成相應(yīng)的cookie。

    3)用戶每請求一次服務(wù)器數(shù)據(jù),cookie則會隨著這些請求發(fā)送到服務(wù)器,服務(wù)器腳本語言如PHP等能夠處理cookie發(fā)送的數(shù)據(jù),可以說是非常方便的。當然前端也是可以生成Cookie的,用js對cookie的操作相當?shù)姆爆崳瑸g覽器只提供document.cookie這樣一個對象,對cookie的賦值,獲取都比較麻煩。而在PHP中,我們可以通過setcookie()來設(shè)置cookie,通過$_COOKIE這個超全局數(shù)組來獲取cookie。

    cookie的內(nèi)容主要包括:名字,值,過期時間,路徑和域。路徑與域一起構(gòu)成cookie的作用范圍。若不設(shè)置過期時間,則表示這個cookie的生命期為瀏覽器會話期間,關(guān)閉瀏覽器窗口,cookie就消失。這種生命期為瀏覽器會話期的cookie被稱為會話cookie。會話cookie一般不存儲在硬盤上而是保存在內(nèi)存里,當然這種行為并不是規(guī)范規(guī)定的。若設(shè)置了過期時間,瀏覽器就會把cookie保存到硬盤上,關(guān)閉后再次打開瀏覽器,這些cookie仍然有效直到超過設(shè)定的過期時間。存儲在硬盤上的cookie可以在不同的瀏覽器進程間共享,比如兩個IE窗口。而對于保存在內(nèi)存里的cookie,不同的瀏覽器有不同的處理方式。

    2.2 Session

    說到Cookie就不能不說Session。

    Session機制。session機制是一種服務(wù)器端的機制,服務(wù)器使用一種類似于散列表的結(jié)構(gòu)(也可能就是使用散列表)來保存信息。當程序需要為某個客戶端的請求創(chuàng)建一個session時,服務(wù)器首先檢查這個客戶端的請求里是否已包含了一個session標識(稱為session id),如果已包含則說明以前已經(jīng)為此客戶端創(chuàng)建過session,服務(wù)器就按照session id把這個session檢索出來使用(檢索不到,會新建一個),如果客戶端請求不包含session id,則為此客戶端創(chuàng)建一個session并且生成一個與此session相關(guān)聯(lián)的session id,session id的值應(yīng)該是一個既不會重復(fù),又不容易被找到規(guī)律以仿造的字符串,這個session id將被在本次響應(yīng)中返回給客戶端保存。保存這個session id的方式可以采用cookie,這樣在交互過程中瀏覽器可以自動的按照規(guī)則把這個標識發(fā)送給服務(wù)器。一般這個cookie的名字都是類似于SEEESIONID。但cookie可以被人為的禁止,則必須有其他機制以便在cookie被禁止時仍然能夠把session id傳遞回服務(wù)器。經(jīng)常被使用的一種技術(shù)叫做URL重寫,就是把session id直接附加在URL路徑的后面。比如:http://damonare.cn?sessionid=123456還有一種技術(shù)叫做表單隱藏字段。就是服務(wù)器會自動修改表單,添加一個隱藏字段,以便在表單提交時能夠把session id傳遞回服務(wù)器。比如:

    <form name="testform" action="/xxx">
    <input type="hidden" name="sessionid" value="123456">
    <input type="text"></form>

    實際上這種技術(shù)可以簡單的用對action應(yīng)用URL重寫來代替。

    2.3 Cookie和Session簡單對比

    Cookie和Session 的區(qū)別:

    1)cookie數(shù)據(jù)存放在客戶的瀏覽器上,session數(shù)據(jù)放在服務(wù)器上。

    2)cookie不是很安全,別人可以分析存放在本地的cookie并進行cookie欺騙,考慮到安全應(yīng)當使用session。

    3)session會在一定時間內(nèi)保存在服務(wù)器上。當訪問增多,會比較占用你服務(wù)器的性能考慮到減輕服務(wù)器性能方面,應(yīng)當使用cookie。

    4)單個cookie保存的數(shù)據(jù)不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie。

    5)所以建議:

    將登陸信息等重要信息存放為SESSION

    其他信息如果需要保留,可以放在cookie中

    2.4 document.cookie的屬性

    expires屬性

    指定了coolie的生存期,默認情況下coolie是暫時存在的,他們存儲的值只在瀏覽器會話期間存在,當用戶推出瀏覽器后這些值也會丟失,如果想讓cookie存在一段時間,就要為expires屬性設(shè)置為未來的一個過期日期。現(xiàn)在已經(jīng)被max-age屬性所取代,max-age用秒來設(shè)置cookie的生存期。

    path屬性

    它指定與cookie關(guān)聯(lián)在一起的網(wǎng)頁。在默認的情況下cookie會與創(chuàng)建它的網(wǎng)頁,該網(wǎng)頁處于同一目錄下的網(wǎng)頁以及與這個網(wǎng)頁所在目錄下的子目錄下的網(wǎng)頁關(guān)聯(lián)。

    domain屬性

    domain屬性可以使多個web服務(wù)器共享cookie。domain屬性的默認值是創(chuàng)建cookie的網(wǎng)頁所在服務(wù)器的主機名。不能將一個cookie的域設(shè)置成服務(wù)器所在的域之外的域。例如讓位于order.damonare.cn的服務(wù)器能夠讀取catalog.damonare.cn設(shè)置的cookie值。如果catalog.damonare.cn的頁面創(chuàng)建的cookie把自己的path屬性設(shè)置為“/”,把domain屬性設(shè)置成“.damonare.cn”,那么所有位于catalog.damonare.cn的網(wǎng)頁和所有位于orlders.damonare.cn的網(wǎng)頁,以及位于damonare.cn域的其他服務(wù)器上的網(wǎng)頁都可以訪問這個cookie。

    secure屬性

    它是一個布爾值,指定在網(wǎng)絡(luò)上如何傳輸cookie,默認是不安全的,通過一個普通的http連接傳輸

    2.5 cookie實戰(zhàn)

    這里我們使用javascript來寫一段cookie,借用w3cschool的demo:

    function getCookie(c_name){
     if (document.cookie.length>0){
     c_start=document.cookie.indexOf(c_name + "=")
     if (c_start!=-1){
     c_start=c_start + c_name.length+1
     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))
     }
     }
     return "";
    }
    
    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.toUTCString())
    }
    function checkCookie(){
     username=getCookie('username')
     if(username!=null && username!=""){alert('Welcome again '+username+'!')}
     else{
     username=prompt('Please enter your name:',"")
     if (username!=null && username!=""){
     setCookie('username',username,355)
     }
     }
    }

    注意這里對Cookie的生存期進行了定義,也就是355天

    3. localStorage

    這是一種持久化的存儲方式,也就是說如果不手動清除,數(shù)據(jù)就永遠不會過期。

    它也是采用Key - Value的方式存儲數(shù)據(jù),底層數(shù)據(jù)接口是sqlite,按域名將數(shù)據(jù)分別保存到對應(yīng)數(shù)據(jù)庫文件里。它能保存更大的數(shù)據(jù)(IE8上是10MB,Chrome是5MB),同時保存的數(shù)據(jù)不會再發(fā)送給服務(wù)器,避免帶寬浪費。

    3.1 localStorage的屬性方法

    下表是localStorge的一些屬性和方法

    QQ圖片20161122092324.png

    3.2 localStorage的缺點

    ① localStorage大小限制在500萬字符左右,各個瀏覽器不一致

    ② localStorage在隱私模式下不可讀取

    ③ localStorage本質(zhì)是在讀寫文件,數(shù)據(jù)多的話會比較卡(firefox會一次性將數(shù)據(jù)導(dǎo)入內(nèi)存,想想就覺得嚇人啊)

    ④ localStorage不能被爬蟲爬取,不要用它完全取代URL傳參

    4. sessionStorage

    和服務(wù)器端使用的session類似,是一種會話級別的緩存,關(guān)閉瀏覽器會數(shù)據(jù)會被清除。不過有點特別的是它的作用域是窗口級別的,也就是說不同窗口間的sessionStorage數(shù)據(jù)不能共享的。使用方法(和localStorage完全相同):

    QQ圖片20161122092324.png

    5. sessionStorage和localStorage的區(qū)別

    sessionStorage用于本地存儲一個會話(session)中的數(shù)據(jù),這些數(shù)據(jù)只有在同一個會話中的頁面才能訪問并且當會話結(jié)束后數(shù)據(jù)也隨之銷毀。因此sessionStorage不是一種持久化的本地存儲,僅僅是會話級別的存儲。當用戶關(guān)閉瀏覽器窗口后,數(shù)據(jù)立馬會被刪除。

    localStorage用于持久化的本地存儲,除非主動刪除數(shù)據(jù),否則數(shù)據(jù)是永遠不會過期的。第二天、第二周或下一年之后,數(shù)據(jù)依然可用。

    5.1 測試

    sessionStorage:

    if (sessionStorage.pagecount){
     sessionStorage.pagecount=Number(sessionStorage.pagecount) +1;
    }else{
     sessionStorage.pagecount=1;
    }
    console.log("Visits "+ sessionStorage.pagecount + " time(s).");

    測試過程:我們在控制臺輸入上述代碼查看打印結(jié)果

    控制臺首次輸入代碼:

    QQ圖片20161122092324.png

    關(guān)閉窗口,控制臺再次輸入代碼:

    QQ圖片20161122092324.png

    所謂的關(guān)閉窗口即銷毀,就是這樣,關(guān)閉窗口重新打開輸入代碼輸出結(jié)果還是上面圖片的樣子,也就是說關(guān)閉窗口后sessionStorage.pagecount即被銷毀,除非重心創(chuàng)建。或者從歷史記錄進入才會相關(guān)數(shù)據(jù)才會存在。好的,我們再來看下localStorge表現(xiàn):

    if (localStorage.pagecount){
     localStorage.pagecount=Number(localStorage.pagecount) +1;
    }else{
     localStorage.pagecount=1;
     }
    console.log("Visits "+ localStorage.pagecount + " time(s).");

    控制臺首次輸入代碼:

    QQ圖片20161122092324.png

    關(guān)閉窗口,控制臺再次輸入代碼:

    QQ圖片20161122092324.png

    6. web Storage和cookie的區(qū)別

    Web Storage(localStorage和sessionStorage)的概念和cookie相似,區(qū)別是它是為了更大容量存儲設(shè)計的。Cookie的大小是受限的,并且每次你請求一個新的頁面的時候Cookie都會被發(fā)送過去,這樣無形中浪費了帶寬,另外cookie還需要指定作用域,不可以跨域調(diào)用。

    除此之外,Web Storage擁有setItem,getItem,removeItem,clear等方法,不像cookie需要前端開發(fā)者自己封裝setCookie,getCookie。

    但是Cookie也是不可以或缺的:Cookie的作用是與服務(wù)器進行交互,作為HTTP規(guī)范的一部分而存在 ,而Web Storage僅僅是為了在本地“存儲”數(shù)據(jù)而生

    聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    Javascript本地存儲小結(jié)

    Javascript本地存儲小結(jié):1. 各種存儲方案的簡單對比Cookies:瀏覽器均支持,容量為4KBUserData:僅IE支持,容量為64KBFlash:100KB,非HTML原生,需要插件支持Google Gears SQLite :需要插件支持,容量無限制LocalStorage:HTML5,容量為5MSesstionStor
    推薦度:
    標簽: js 存儲 本地存儲
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 精品国产乱码久久久久久浪潮| 国产午夜精品一区二区三区不卡| 久久99精品国产一区二区三区| 蜜桃麻豆www久久国产精品| 92国产精品午夜福利| 无码精品第一页| 99久久精品国产一区二区三区| 久久精品中文无码资源站| 欧美日韩国产成人高清视频,欧美日韩在线精品一 | 四虎影视永久在线精品免费| 99riav国产精品| 国产午夜精品一区理论片| 精品熟女少妇a∨免费久久| 亚洲av午夜成人片精品电影| 国产在线观看高清精品| 亚洲日本精品一区二区| 国产精品一区二区不卡| 国产精品无码久久久久久| 亚洲国产精品无码AAA片| 亚洲?V无码成人精品区日韩| 国産精品久久久久久久| 丁香色婷婷国产精品视频| 欧美精品一本久久男人的天堂 | 国产精品一香蕉国产线看观看 | 久久久WWW成人免费精品| 欧美一区二区精品系列在线观看 | 精品不卡一区二区| 亚洲精品无码专区在线在线播放| 久热精品人妻视频| 久久精品免费大片国产大片| 国产色精品vr一区区三区| 国产精品一区二区三区99| 国产欧美精品一区二区色综合 | 亚洲国产精品久久久久| 久久免费精品一区二区| 精品九九久久国内精品| 精品国产品香蕉在线观看75| 国产精品久久99| 8050免费午夜一级国产精品| 日本一区精品久久久久影院| 尤物国产在线精品福利一区|