Lưu trữ cục bộ HTML5 so với lưu trữ phiên


561

Ngoài việc không liên tục và chỉ nằm trong phạm vi cửa sổ hiện tại, còn có bất kỳ lợi ích nào (hiệu suất, truy cập dữ liệu, v.v.) đối với Lưu trữ phiên qua Lưu trữ cục bộ không?


15
@robert - Tôi tin rằng bạn không chính xác. Từ w3.org/TR/webst Storage sessionStorage nằm trong phạm vi "bối cảnh duyệt cấp cao nhất", nghĩa là nó là duy nhất cho mỗi tab / cửa sổ trình duyệt. Tuy nhiên, localStorage nằm trong phạm vi gốc, có nghĩa là nó được chia sẻ trên tất cả các trang có cùng nguồn gốc.
broofa

5
Re: Hiệu suất jsperf.com/localst Storage
vs

Câu trả lời:


812

localStoragesessionStorage đều mở rộng Storage . Không có sự khác biệt giữa chúng ngoại trừ mục đích "không kiên trì" dự định của sessionStorage.

Đó là, dữ liệu được lưu trữ localStorage vẫn tồn tại cho đến khi bị xóa rõ ràng . Những thay đổi được thực hiện được lưu và có sẵn cho tất cả các lượt truy cập hiện tại và tương lai vào trang web.

Đối với sessionStorage, thay đổi chỉ có sẵn trên mỗi tab. Các thay đổi được thực hiện được lưu và có sẵn cho trang hiện tại trong tab đó cho đến khi nó được đóng lại. Khi nó được đóng lại, dữ liệu được lưu trữ sẽ bị xóa.


17
có một cuộc thảo luận rộng hơn mà bạn có thể thấy hữu ích ở đây: stackoverflow.com/questions/19867599/iêu
Ed Sykes

13
nếu bạn lưu một số dữ liệu trong bộ lưu trữ dưới http, bạn sẽ không thể truy xuất dữ liệu đó tại https
Đánh dấu Thiên

tôi đã thử nghiệm điều này trên Chrome v41.x và có vẻ như tuyên bố trên về https là không đúng: localStorage giữ lại dữ liệu được lưu trữ của nó.
CCC

36
SessionStorage tồn tại qua trang tải lại và khôi phục trang, nhưng việc mở một tab / cửa sổ mới sẽ bắt đầu một phiên mới.
Patrick

160

Sự khác biệt duy nhất là localStorage có thời gian hết hạn khác nhau, sessionStoragesẽ chỉ có thể truy cập được trong khi và bởi cửa sổ tạo ra nó đang mở.
localStoragekéo dài cho đến khi bạn xóa nó hoặc người dùng xóa nó.
Cho phép nói rằng bạn muốn lưu tên người dùng đăng nhập và mật khẩu mà bạn muốn sử dụng sessionStoragetrên localStoragevì những lý do an ninh (ví dụ. Một người khác truy cập vào tài khoản của họ sau một thời gian).
Nhưng nếu bạn muốn lưu cài đặt của người dùng trên máy của họ thì có lẽ bạn sẽ muốn localStorage. Tất cả trong tất cả:

localStorage- sử dụng để sử dụng lâu dài.
sessionStorage- sử dụng khi bạn cần lưu trữ một số thứ thay đổi hoặc tạm thời


103

Vài điểm khác có thể hữu ích để hiểu sự khác biệt giữa lưu trữ cục bộ và phiên

  1. Cả lưu trữ cục bộ và lưu trữ phiên đều nằm trong phạm vi nguồn gốc tài liệu, vì vậy

    https://mydomain.com/
    http://mydomain.com/
    https://mydomain.com:8080/

    Tất cả các URL trên sẽ không chia sẻ cùng một bộ lưu trữ. (Đường dẫn thông báo của trang web không ảnh hưởng đến bộ nhớ web)

  2. Lưu trữ phiên là khác nhau ngay cả đối với tài liệu có cùng chính sách gốc được mở trong các tab khác nhau, do đó, cùng một trang web mở trong hai tab khác nhau không thể chia sẻ cùng một lưu trữ phiên.

  3. Cả lưu trữ cục bộ và phiên cũng được giới hạn bởi các nhà cung cấp trình duyệt . Vì vậy, dữ liệu lưu trữ được lưu bởi IE không thể được đọc bởi Chrome hoặc FF.

Hi vọng điêu nay co ich.


3
Không, cùng một phiênStorage chia sẻ giữa http và https nhưng localStorage thì không.
Shahdat

5
Nếu bạn đặt sessionStorage trong https gốc trước, nó sẽ có sẵn trong http nhưng nếu bạn tạo sessionStore trong http thì sẽ không có sẵn trong http
Shahdat

4
@Shahdat, ý bạn là "sau đó sẽ không có sẵn trong https" (chú ý các s)?
Daniel Werner

3
@DanielWerner có, nếu bạn tạo sessionStore trong http thì sẽ không có sẵn trong https.
Shahdat

28

Sự khác biệt chính giữa localStoragesessionStoragesessionStoragelà duy nhất cho mỗi tab. Nếu bạn đóng tab, sessionStoragenó sẽ bị xóa localStorage. Ngoài ra, bạn không thể giao tiếp giữa các tab :)

Một khác biệt tinh tế là ví dụ trên Safari (8.0.3) localStoragecó một giới hạn của 2551 ký tự k nhưng sessionStoragelưu trữ không giới hạn

Trên Chrome (v43) cả hai localStoragesessionStorageđược giới hạn ở 5101 k ký tự (không có sự khác biệt giữa chế độ bình thường / ẩn danh)

Trên Firefox cả hai localStoragesessionStorageđược giới hạn ở 5120 k ký tự (không có sự khác biệt giữa chế độ bình thường / riêng tư)

Không có sự khác biệt về tốc độ nào :)

Cũng có vấn đề với Mobile Safari và Mobile Chrome, Safari Chế độ riêng tư & Chrome có không gian tối đa là 0KB


1
Giới hạn 5101 k ký tự? vậy .. 5.101 triệu ký tự?
Zze

@Zze Có, 1 ký tự thường là 1 byte do đó 5 triệu ký tự là 5Mb dung lượng lưu trữ.
Basim Khajwal

@BasimKhajwal Đó là 5MB. Byte, không phải bit.
Yeti

Bạn có thể vui lòng thêm nguồn vào những gì bạn đã đề cập?
Mukus

@Mukus, không có nguồn nào cả bất cứ điều gì ở đó. Bạn cũng có thể kiểm tra bằng cách sử dụng công cụ này - dev-test.nemikor.com/web-st Storage / support
Eek

17

sessionStoragecũng giống như localStorage, ngoại trừ việc nó lưu trữ dữ liệu chỉ trong một phiên và nó sẽ bị xóa khi người dùng đóng cửa sổ trình duyệt đã tạo ra nó.


10

hiệu suất khôn ngoan, các phép đo (thô) của tôi không tìm thấy sự khác biệt nào trên 1000 lần ghi và đọc

Bảo mật khôn ngoan, theo trực giác có vẻ như localStore có thể bị đóng cửa trước sessionStore, nhưng không có bằng chứng cụ thể - có lẽ ai đó khác?

chức năng khôn ngoan, đồng tình với digitalFresh ở trên


1
liên quan đến hiệu suất tải trang: Cả hai, sessionStorage và localStorage đều được khởi tạo và đưa ra khỏi chu trình tải trang. Do đó, số điện thoại trên thời gian tải trang ban đầu không thể đo được từ bên trong trình duyệt.
Mirko

6

Lưu trữ phiên Ya và lưu trữ cục bộ giống nhau về hành vi ngoại trừ một lưu trữ cục bộ sẽ lưu trữ dữ liệu cho đến khi và trừ khi người dùng xóa bộ nhớ cache và cookie và dữ liệu lưu trữ phiên sẽ giữ lại trong hệ thống cho đến khi chúng tôi đóng phiên i, e cho đến khi chúng tôi đóng phiên lưu trữ phiên tạo cửa sổ.


5

Theo tôi, ưu điểm của lưu trữ phiên so với lưu trữ cục bộ là nó có dung lượng không giới hạn trong Firefox và sẽ không tồn tại lâu hơn phiên. (Tất nhiên nó phụ thuộc vào mục tiêu của bạn là gì.)


2

Lưu trữ cục bộ: Nó lưu trữ dữ liệu thông tin người dùng mà không hết hạn, dữ liệu này sẽ không bị xóa khi người dùng đóng các cửa sổ trình duyệt, nó sẽ có sẵn cho ngày, tuần, tháng và năm.

//Set the value in a local storage object
localStorage.setItem('name', myName);

//Get the value from storage object
localStorage.getItem('name');

//Delete the value from local storage object
localStorage.removeItem(name);//Delete specifice obeject from local storege
localStorage.clear();//Delete all from local storege

Lưu trữ phiên: Giống như ngày lưu trữ cục bộ ngoại trừ việc nó sẽ xóa tất cả các cửa sổ khi cửa sổ trình duyệt đóng bởi người dùng web.

//set the value to a object in session storege
sessionStorage.myNameInSession = "Krishna";

Đọc thêm Bấm


2
  • sessionStorage duy trì một vùng lưu trữ riêng cho từng nguồn gốc nhất định có sẵn trong suốt thời gian của phiên trang (miễn là trình duyệt được mở, bao gồm tải lại và khôi phục trang)

  • localStorage làm điều tương tự, nhưng vẫn tồn tại ngay cả khi trình duyệt được đóng và mở lại.

Tôi lấy cái này từ https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.