国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

瀏覽器存儲

molyzzx / 3577人閱讀

摘要:下面就一個簡單例子來說明存取值曾田生獲取刪除指定值清空存儲事件和存儲發生變化就會觸發存儲事件,事件采用廣播的機制,會在同樣站點的作用域范圍內發送消息。

客戶端的存儲相當于給瀏覽器賦予了記憶功能。同一個站點的數據是如何共享數據的,一個頁面填寫的表單如何顯示在另一個頁面中,頁面關閉或瀏覽器退出,打開還能重新顯示原來的頁面,這些都可以依靠瀏覽器的存儲功能來實現。

一、Web存儲 1、localStorage和sessionStorage

基本代碼實現

兩個屬性都代表同一個Storage對象,一個持久化關聯數組,數組使用字符串來索引,儲存的值也是字符串的形式。localStorage和sessionStorage的區別在于儲存的有效期和作用域不同,儲存形式和api是一樣的。

一般使用形式

localStorage.name = "曾田生"; // 儲存字符串
var name = localStorage.name; // 獲取存儲信息

當儲存數字時會自動轉化成字符串,所以在取值是需要手動轉換

localStorage.age = 666;
var age = parseInt(localStorage.age);

日期也一樣

localStorage.time = (new Date()).toUTCString();
var time = new Date(Date.parse(localStorage.time));

咱們常用的json數據

localStorage.jsonData = JSON.stringify(data);
var jsonData = JSON.parse(localStorage.jsonData);

存儲API

localStorage和sessionStorage除了可以通過上面的設置屬性來存儲值和通過查詢屬性來取值外,還有一套API操作數據。
下面就一個簡單例子來說明:

// 存取值
localStorage.setItem("name","曾田生");
var name = localStorage.getItem("name");
// 獲取 key - value 
var keyName = localStorage.key(0);
var value = localStorage.getItem(keyName);
// 刪除指定值
localStorage.removeItem("name");
// 清空 localStora
localStorage.clear();

存儲事件

localStorage和sessionStorage 存儲發生變化就會觸發存儲事件,事件采用廣播的機制,會在同樣站點的作用域范圍內發送消息。注意的是 localStorage和sessionStorage 的區別在于作用域的不同,所以事件觸發的窗口也有區別,作用域在下面小節會講到,還有一點是在發生存儲數據改變的窗口上是不會觸發該存儲事件的。

下面一個小例子:
我打開了兩個頁面 index.html

btn.addEventListener("click", function () {
        localStorage.name = "曾田生"; // 儲存字符串
        var name = localStorage.name; // 獲取存儲信息
    })

index2.html 做存儲事件監聽:window.addEventListener

window.addEventListener("storage", function(e){
        console.log(e);
        console.log("oldValue: "+ e.oldValue + " newValue:" + e.newValue);

    });

點擊 index.html 的 button 后 index2.html打印出如下消息

存儲有效期和作用域

localStorage和sessionStorage 的使用和api是相同的,但它們的有效期和作用域是有區別的。

(1)、localStorage
localStorage 的作用域限定在文檔源級別,什么意思呢,協議、主機名、端口三者一樣那就是同一文檔源,同源的文檔間共享同樣的localStorage數據。比如如下:

http://www.example.com   // 協議:http;主機名:www.example.com
https://www.example.com     // 不同協議
http://demo.example.com     // 不同 主機名
http://www.example.com:8000 // 不同端口

以上只有不滿足同源要求,即使在同一臺服務器也不能共享localStorage數據。

(2)、sessionStorage
首先 sessionStorage的作用域也是限定在同源里面,并且sessionStorage的作用域還被限定在窗口中。
比如:
A.html

B.html

點擊 A.html 的

但是不通過 A.html 的 二、cookie

cookie最早是設計為被服務器所用,cookie數據會自動在web服務器和web瀏覽器之間傳輸的,所用服務器可讀取來著客戶端cookie的值并修改其cookie值。
或許你對自動傳輸這個概覽不是很理解,先看一個例子:
設置cooike:

window.onload = function () {
    document.cookie = "user = zss";
    document.cookie = "age = 233";
}

接著想服務端隨便發送一個GET請求:

app.get("/getAge", function (req, res) {
    console.log("-------------cookie---------");
    console.log(req.headers);
    console.log("-------------cookie---------");
    res.send("Hello World");
});

var server = app.listen(8081, function () {
    console.log("應用實例,訪問地址為 http://%s:%s", host, port)
});

服務端接受GET請求咱們打印出響應頭看看:

-------------cookie---------
{ host: "127.0.0.1:8081",
  connection: "keep-alive",
  "upgrade-insecure-requests": "1",
  "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36",
  accept: "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
  "accept-encoding": "gzip, deflate, sdch, br",
  "accept-language": "zh-CN,zh;q=0.8",
  cookie: "Hm_lvt_800f0f35f4557a08958a37aa22f2d2b0=1485226901; user=zss; age=233",
  "if-none-match": "W/"b-sQqNsWTgdUEFt6mb5y4/5Q"" }
-------------cookie---------

有沒有看到雖然咱們客戶端隨便發送個請求,客戶端就會把設置的 cookie 給帶了過去,cookie數據會自動在web服務器和web瀏覽器之間傳輸

1、保存和讀取cookie

保存 cookie

設置cookie非常簡單,只需將cookie屬性設置為一個字符串形式的值。如

    document.cookie = "name="+encodeURIComponent("曾田生");

為什么需要 encode值呢,因為cookie的 名/值 中的值是不允許包含分號、逗號和空白符的。所用一般在存值得使用會采取相應的 encode,同樣讀取值得使用也需要 decode 一下。
上面一簡單 名/值 的形式儲存cookie數據的有效期只在當前 Web 瀏覽器的會話內,一但用戶關閉瀏覽器cookie數據就丟失。
所以還可以給 cookie 添加日期和一些其他信息,只需以逗號分開:

document.cookie = "name="+encodeURIComponent("曾田生")+
                        ";max-age="+60*60+   // 設置有效期 60*60就是1小時有效
                        ";path="+"path"+     // 設置路徑
                        ";domain="+"domain"+
                        ";secure="+"secure";

讀取 cookie

讀取cookie 其返回值是一個字符串,所以下面寫個了方法將字符串的 cookie 轉成對象的形式:

function getCookie(){
        var cookie = {};
        var all = document.cookie;
        if(all === ""){
            return cookie;
        }
        var list = all.split("; ");
        for(var i= 0,len=list.length;i
2、cookie 的作用域

cookie的作用域是通過文檔源和文檔路徑來確定的。該作用域是通過文檔源和文檔路徑來確定,也可通過cookie的 path和domain屬性來配置不同的作用域。

默認情況

默認情況下在下面頁面創建了cookie,那么該cooki對頁面同目錄或子目錄是可見的,如下頁面創建了cookie:

http://www.example.com/src/index.html

那么該cookie對下面的頁面是可見的:

http://www.example.com/src/index2.html
http://www.example.com/src/A/index.html
http://www.example.com/src/B/C/index.html

對下面頁面不可見:

http://www.example.com/index3.html
http://www.example.com/A/index.html

path 改變作用域

前面也講了,默認情況下哪個頁面創建了cookie,那么該cooki對頁面同目錄或子目錄是可見的。那要是我們有個需求是:用戶在這個頁面添加的表單數據在整個網站都可以用(包括它的父級頁面)。
那就需要利用 cookie的path 屬性了,如:
cookie是在以下頁面所創建的:

http://www.example.com/A/B/index.html

修改 path:

document.cookie ="path="+"/A";   // 設置路徑

本來只能在 /B 或 /B 以下的目錄能訪問到cookie ,現在 是在 /A 即以下目錄能訪問cookie 了!

進一步修改path:

document.cookie ="path="+"/";   // 設置路徑

現在是該cookie對任何 http://www.example.com 這臺服務器可見了!

發現點:把cookie的 path 設為 "/" 等于前面所說的 localStorage 擁有相同的作用域了!

domain 修改作用域

還有一種需求是:一些業務需要,A.example.com 域下的服務器想要讀取 B.example.com 域下的服務器設置的cooike值,那該怎么辦呢,domain它說它能解決:

document.cookie ="path="+"/"   // 設置路徑
                  +";domain="+".example.com" // 設置domain

那么,cookie就能在 example.com 下的任何其他服務器可見了。

cooike 的 secure 屬性

cookie 默認是以不安全的形式(通過普通的,不安全的 HTTP 鏈接)傳遞的。
設置 secure:

document.cookie ="secure="+true"   

那么 cookie 只能在 HTTPS 或其他安全協議鏈接的時候它才能傳遞。

三、離線Web儲存

localStorage和sessionStorage 只是保存了 web應用程序相關的數據,要是我們想要保存比如圖片、
css 、js等文件 ,是否能做到呢。

1、appcache

HTML5新增了‘應用程序緩存’,配合一份緩存清單,就可實現比如圖片、css 、js等文件的緩存,甚至做到
離線web應用。
下面以一個例子講述:
項目文件:

index.html: 在




    
    appcache test
    


img2

其中 style.css

body{
    background: #eb5f6f;
}
.img-1{
    width: 100px;
    height: 100px;
    background: url("img/img_1.png") no-repeat;
    background-size: 100%;
}
.img-2{
    width: 100px;
    height: 100px;
}

index.js

window.onload = function () {
    document.getElementById("text").innerHTML="appcache 測試";
}

app.appcache 配置文件:

CACHE MANIFEST
# version 1.0.1

index.js
style.css
img/img_1.png
img/img_2.png


NETWORK:
*

FALLBACK:
./index.html ./404.html

第一次加載頁面:

可以看到資源被緩存了

再次刷新頁面:
NetWork這邊的 size 顯示 form disk cache ,并且咱們的網頁,css js 和圖片都是正常顯示的,但這時是從磁盤上獲取的文件,而不是網絡上。

有了上面的例子,咱們來介紹介紹 app.appcache 配置文件:

CACHE MANIFEST

清單文件必須以 CACHE MANIFEST 開頭,其余一行一個 url,指向相對 .appcache 路徑的資源,上面也看到了,資源可以是 .css .js 圖片或其他。

NETWORK

標識了URL的資源從不緩存

NETWORK:
*

則表示任何不在清單的資源,瀏覽器都從網絡加載。

FALLBACK

這個標簽底下每行都包含兩個URL ,比如:

FALLBACK:
./index.html ./404.html

第一個Url 表示匹配到的資源不被緩存起來,會去網絡加載,第二個Url表示當第一個Url從網絡加載的資源出錯,那就加載第二個Url的資源來顯示。

2、j慎用 appcache

雖然看了上面 appcache 感覺挺不錯的樣子,但不幸的是官方已經不推薦使用,這一套緩存在實際項目中純在很多缺陷,比如:

1、當緩存清單緩存了文件,文件有改動,但用戶訪問的資源還是從緩存中讀取,必須修改 appcache緩存文件,當用戶

再次訪問網頁的時候緩存文件采取從新從服務器拉去資源,但糟糕的是只是去服務端拉取資源而已,用戶訪問的還是原來的緩存,需要用戶再次刷新頁面才能從緩存中讀取新的資源。

這也是為什么我在

CACHE MANIFEST
# version 1.0.1

加了個 version 的原因,因為你改的任何 appcache 都會觸發清單文件重新去服務器拉取資源

2、如果更新的資源中有一個資源更新失敗了,將導致全部更新失敗,將用回上一版本的緩存。這更坑

3、manifest本身的編寫要求比較嚴格,要注意換行跟路徑文件名之類的問題。不然緩存將無效。

等等,所以慎用,慎用

總結:

介紹了幾種瀏覽器存儲方式,希望對你所有幫助,起碼有個大概了解也是可以的,在實際工作開發中要針對合適的場景選擇合適的存儲方式。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/61841.html

相關文章

  • JavaScript學習篇--本地存儲

    摘要:本地存儲的方案傳統把信息存儲到客戶端的瀏覽器中但是項目服務器端也是可以獲取的把信息存儲到服務器上的服務器存儲永久存儲在客服端的本地。 在客戶端運行的js是不能操作用戶電腦磁盤中的文件的(這是為了保護客戶端運行的安全)。 1、js中的本地存儲: 使用js向瀏覽器的某一個位置中存儲一些內容,瀏覽器即使關閉了,存儲的信息也不會銷毀,當在重新打開瀏覽器的時候我們依然可以獲取到上一次存儲的信息。...

    hss01248 評論0 收藏0
  • JavaScript是如何工作的:存儲引擎+如何選擇合適的存儲API

    摘要:字節流這個簡單的模型將數據存儲為長度不透明的字節字符串變量,將任何形式的內部組織留給應用層。字節流數據存儲的代表例子包括文件系統和云存儲服務。使用同步存儲會阻塞主線程,并為應用程序的創建凍結體驗。 這是專門探索 JavaScript 及其所構建的組件的系列文章的第 16 篇。 想閱讀更多優質文章請猛戳GitHub博客,一年百來篇優質文章等著你! 如果你錯過了前面的章節,可以在這里找到它...

    draveness 評論0 收藏0
  • js客戶端存儲之Web存儲

    摘要:存儲客戶端存儲有幾種方式,存儲就是其中一種。瀏覽器兼容性存儲有效期永久性。實際上,的數據是寫入磁盤中,每次讀取數據時,實際上是從硬盤驅動器上讀取這些字節。所以不要在客戶端存儲敏感信息,比如密碼或信用卡信息。 WEB存儲 客戶端存儲有幾種方式,WEB存儲就是其中一種。最初作為H5的一部分被定義成API形式,后來被剝離出來作為獨立的標準。所描述的API包含localStorage對象和se...

    ixlei 評論0 收藏0
  • 【芝士整理】覽器存儲

    摘要:維護瀏覽器和服務器端會話狀態的一種方式,一般用于保存用戶身份信息。服務器端生成推送到瀏覽器端,瀏覽器負責保存和維護數據。 Cookie 維護瀏覽器和服務器端會話狀態的一種方式,一般用于保存用戶身份信息。 服務器端生成Cookie推送到瀏覽器端,瀏覽器負責保存和維護數據。 特點 域名下的所用請求都會帶上Cookie 每條Cookie限制在4KB左右 Cookie在過期時間之前一直有效,若...

    whlong 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<