LocalStorage bền bỉ như thế nào?


100

Tôi phụ thuộc rất nhiều vào localStorage cho một plugin mà tôi đang viết. Tất cả các cài đặt người dùng được lưu trữ trong đó. Một số cài đặt yêu cầu người dùng ghi regex'es và họ sẽ rất buồn nếu các quy tắc regex của họ không còn nữa. Vì vậy, bây giờ tôi đang tự hỏi mức độ bền bỉ của localStorage.

Từ các thông số kỹ thuật :

Tác nhân người dùng chỉ nên làm hết hạn dữ liệu từ các khu vực lưu trữ cục bộ vì lý do bảo mật hoặc khi người dùng yêu cầu.

Ở trên có vẻ như nó hoạt động giống như cookie trên clientide. Tức là khi người dùng xóa tất cả dữ liệu trình duyệt (lịch sử, cookie, bộ nhớ cache, v.v.) thì localStorage cũng sẽ bị cắt bớt. Giả thiết này có đúng không?


1
Xem xét rằng các trình duyệt có thể quyết định điều gì tạo thành "lý do bảo mật", trong một thế giới lý tưởng, bạn sẽ không cho rằng nó sẽ tồn tại rất lâu. Tuy nhiên, có thể an toàn nếu giả định rằng nó vẫn tồn tại cho đến khi người dùng xóa nó một cách rõ ràng.
Corbin

1
Chỉ một cảnh báo khi sử dụng localStorage: Nó dường như không hoạt động đáng tin cậy trong Firefox 39, 38 và 37 (chúng tôi không kiểm tra bất kỳ thứ gì cũ hơn). Trên khoảng 1% máy của người dùng của chúng tôi, localStorage đôi khi bị mất khi đang duyệt trang web của chúng tôi, trong khi cookie phiên được giữ nguyên. Có vẻ như một lỗi đối với tôi.
Andreas

1
@PeeHaa, Nó không chỉ hoạt động như cookie mà còn được định nghĩa hợp pháp là "cookie" . Trên thực tế, thông tin bộ nhớ được hiển thị ngay cùng với các cookie khác trong urlchrome:settings/cookies
Pacerier

Câu trả lời:


69

Mozilla triển khai nó giống như cookie:

Bộ nhớ DOM có thể được xóa thông qua "Công cụ -> Xóa lịch sử gần đây -> Cookie" khi Phạm vi thời gian là "Mọi thứ" (thông qua nsICookieManager :: removeAll)

https://developer.mozilla.org/en/DOM/Storage

Trong Bộ nhớ DOM , không thể chỉ định khoảng thời gian hết hạn cho bất kỳ dữ liệu nào của bạn. Tất cả các quy tắc hết hạn được để lại cho người dùng. Trong trường hợp của Mozilla, hầu hết các quy tắc đó được kế thừa từ các quy tắc hết hạn liên quan đến Cookie. Do đó, bạn có thể mong đợi hầu hết dữ liệu Bộ nhớ DOM của mình sẽ tồn tại ít nhất trong một khoảng thời gian có ý nghĩa.

http://ejohn.org/blog/dom-storage/

Chrome triển khai nó giống như bộ nhớ cache:

LocalStorage không phải là bộ nhớ an toàn

Bộ nhớ cục bộ HTML5 lưu dữ liệu không được mã hóa ở dạng chuỗi trong bộ đệm ẩn của trình duyệt thông thường .

Sự bền bỉ

Trên đĩa cho đến khi bị người dùng xóa (xóa bộ nhớ cache) hoặc bởi ứng dụng

https://developers.google.com/web-toolkit/doc/latest/DevGuideHtml5Storage


Đối với "thay thế cho Cookie", không hoàn toàn

Cookie và lưu trữ cục bộ thực sự phục vụ các mục đích khác nhau. Cookie chủ yếu để đọc phía máy chủ, LocalStorage chỉ có thể được đọc phía máy khách. Vậy câu hỏi đặt ra là trong ứng dụng của bạn, ai cần dữ liệu này - máy khách hay máy chủ?


1
Tôi nghĩ rằng liên kết MDN này giải thích rõ ràng hơn.
Bo Lu

17

Về cơ bản, bạn không nên phụ thuộc nhiều vào Local Storage.

Local Storage, cùng với Session Storage, nhằm mục đích thay thế cookie, xác định một API nhất quán hơn. Có một số khác biệt so với cookie:

  • Trong khi các cookie có thể truy cập được từ cả phía máy khách và máy chủ, Web Storage nói chung và Local Storage nói riêng chỉ có thể truy cập từ phía máy khách.
  • Dung lượng nâng cao (chính thức cho cookie là 4 KB) lên hơn 5MB cho mỗi miền (Firefox, Google Chrome và Opera và 10MB trong IE).

Vì vậy, , giả định của bạn là đúng.


1
+1 - đây là lý do tại sao tôi sử dụng bộ nhớ cục bộ làm bộ nhớ đệm và sao lưu dữ liệu người dùng trên máy chủ. (Tất nhiên, đó là giả định có một cơ chế đăng nhập tại chỗ.)
josh3736

2
Basically, you should not heavily depend on Local Storage.... Chắc chắn rồi !!
Tenali Raman

7

Một điều cần lưu ý về việc sử dụng bộ nhớ cục bộ. Nó rất cụ thể cho trình duyệt. Nếu bạn lưu trữ dữ liệu bằng firefox, nó sẽ không khả dụng trong chrome hoặc tức là, v.v. Ngoài ra, về việc xóa cookie và phiên, tôi nhận thấy nó cũng là trình duyệt cụ thể về việc bộ nhớ cục bộ có bị xóa hay không. Tôi sẽ xem xét chi tiết rất nhiều nếu bạn thực sự định dựa vào bộ nhớ cục bộ cho một ứng dụng.


14
Điều này không đúng với cookie sao?
Jeffrey Sweeney

3
Điều này cũng đúng đối với cookie.
Moshe L ngày

Không, điều này không nhất thiết đúng với cookie: Trên OSX, các ứng dụng sử dụng Webkit dường như đang chia sẻ Cookie theo kinh nghiệm của tôi. Mặc dù tôi có thể hiểu sai về hiệu ứng.
Thomas Tempelmann

Mặt khác, anh ấy đang viết một plugin mà tôi cho là dành riêng cho trình duyệt.
GuyT

5

Local Storage được thiết kế để trở thành nơi lưu trữ dữ liệu liên tục, đáng tin cậy trên máy khách. Nó không được thiết kế như một "cookie tốt hơn": chức năng đó được thiết kế để đáp ứng bởi Session Storage.

Từ Đề xuất Ứng viên Đặc điểm Lưu trữ Web tháng 12 năm 2011 ,

(Bộ nhớ cục bộ) được thiết kế để lưu trữ trên nhiều cửa sổ và kéo dài ngoài phiên hiện tại. Cụ thể, các ứng dụng Web có thể muốn lưu trữ megabyte dữ liệu người dùng, chẳng hạn như toàn bộ tài liệu do người dùng tạo hoặc hộp thư của người dùng, ở phía máy khách vì lý do hiệu suất.

Là dữ liệu phía máy khách - nó ổn định như bất kỳ dữ liệu phía máy khách nào , trong giới hạn kích thước mà trình duyệt triển khai. Người dùng có thể xóa nó bất kỳ lúc nào, mở nó trong trình soạn thảo văn bản và chỉnh sửa, v.v. - giống như BẤT KỲ dữ liệu phía máy khách nào.


1
Có lẽ điều này đã thay đổi so với bài đăng gốc của bạn cách đây 8 năm, nhưng Local Storage rất có thể được sử dụng để thay thế cho cookie (nơi chỉ cần truy cập phía máy khách). Không thể lưu trữ phiên. Bộ nhớ Phiên bị xóa ngay sau khi trình duyệt đóng.
Brad

3

Nếu bạn đang sử dụng localStorage cho ứng dụng iOS, hãy hết sức cẩn thận. Phiên bản iOS mới nhất (5.1 ngoài đầu tôi) đã chuyển dữ liệu localstorage và localdb vào một phần của bộ nhớ đệm thường xuyên bị xóa, tức là không liên tục. Tôi chưa thể biết đây là lỗi hay do thay đổi chính sách.


2
Tôi tin rằng điều này đúng với WebViews nhưng không đúng với Safari.
Trott
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.