Đối tượng HTML5 localStorage có bị cô lập trên mỗi trang / miền không? Tôi tự hỏi vì làm thế nào tôi sẽ đặt tên cho khóa LocalStorage. Tôi có cần một tiền tố riêng? Hoặc tôi có thể đặt tên cho họ bất cứ điều gì tôi muốn?
Đối tượng HTML5 localStorage có bị cô lập trên mỗi trang / miền không? Tôi tự hỏi vì làm thế nào tôi sẽ đặt tên cho khóa LocalStorage. Tôi có cần một tiền tố riêng? Hoặc tôi có thể đặt tên cho họ bất cứ điều gì tôi muốn?
Câu trả lời:
Đó là trên mỗi tên miền và cổng (cùng một quy tắc tách biệt với cùng một chính sách nguồn gốc ), để làm cho nó trên mỗi trang bạn phải sử dụng một khóa dựa trên location
, hoặc một số cách tiếp cận khác.
Bạn không cần tiền tố, hãy sử dụng một tiền tố nếu bạn cần. Ngoài ra, có, bạn có thể đặt tên cho họ bất cứ điều gì bạn muốn.
protocol://host:port
kết hợp.
Các cửa hàng theo mỗi nguồn gốc , trong đó "nguồn gốc" giống với Chính sách nguồn gốc tương tự (sự kết hợp của lược đồ [ http
so với https
, v.v.], cổng và máy chủ). Từ thông số kỹ thuật :
Mỗi bối cảnh duyệt cấp cao nhất có một tập hợp các vùng lưu trữ phiên duy nhất, một vùng cho mỗi nguồn gốc.
Do đó, bộ lưu trữ cho http://a.example.com
và bộ lưu trữ http://b.example.com
là riêng biệt (và cả hai đều tách biệt http://example.com
) vì đó là tất cả các máy chủ khác nhau. Tương tự như vậy, http://example.com:80
và http://example.com:8080
và https://example.com
được tất cả các nguồn gốc khác nhau.
Không có cơ chế được tích hợp vào bộ lưu trữ web cho phép một nguồn gốc truy cập vào bộ lưu trữ của người khác.
Lưu ý rằng đó là nguồn gốc , không phải URL, http://example.com/page1
và http://example.com/page2
cả hai đều có quyền truy cập vào bộ lưu trữ cho http://example.com
.
Vâng, mỗi tên miền / tên miền phụ có một localStorage khác nhau và bạn có thể gọi các khóa bất cứ điều gì bạn muốn (không bắt buộc phải có tiền tố).
Để lấy khóa, bạn có thể sử dụng khóa phương thức (chỉ mục), chẳng hạn như
localStorage.key(0);
Có một đối tượng được gọi là globalStorage trước khi bạn có thể có nhiều LocalStorage, nhưng nó không được chấp nhận từ thông số kỹ thuật
Như những người khác đã chỉ ra, localStorage là duy nhất cho mỗi giao thức, máy chủ và cổng. Nếu bạn muốn một cách thuận tiện để kiểm soát bộ nhớ của mình bằng các khóa có tiền tố, tôi đề nghị localDataStorage .
Nó không chỉ giúp thực thi lưu trữ chia sẻ được phân đoạn trong cùng một miền bằng các khóa tiền tố, mà còn lưu trữ trong suốt các loại dữ liệu javascript (Array, Boolean, Date, Float, Integer, String và Object), cung cấp mã hóa dữ liệu nhẹ, tự động nén chuỗi và tạo điều kiện truy vấn theo khóa (tên) cũng như truy vấn theo giá trị (khóa).
[TUYÊN BỐ TỪ CHỐI] Tôi là tác giả của tiện ích [/ DISCLAIMER]
Ví dụ:
// instantiate our first storage object
// internally, all keys will use the specified prefix, i.e. passphrase.life
var localData = localDataStorage( 'passphrase.life' );
localData.set( 'key1', 'Belgian' )
localData.set( 'key2', 1200.0047 )
localData.set( 'key3', true )
localData.set( 'key4', { 'RSK' : [1,'3',5,'7',9] } )
localData.set( 'key5', null )
localData.get( 'key1' ) --> 'Belgian'
localData.get( 'key2' ) --> 1200.0047
localData.get( 'key3' ) --> true
localData.get( 'key4' ) --> Object {RSK: Array(5)}
localData.get( 'key5' ) --> null
// instantiate our second storage object
// internally, all keys will use the specified prefix, i.e. prismcipher.com
var localData2 = localDataStorage( 'prismcipher.com' );
localData2.set( 'key1', 123456789 ) // integer
localData2.get( 'key1' ) --> 123456789
Như bạn có thể thấy, các giá trị nguyên thủy được tôn trọng và bạn có thể tạo một số trường hợp để kiểm soát bộ nhớ của mình.
Nó có sẵn ở bất cứ nơi nào trên miền đó như Nick đề xuất, vì một giải pháp thay thế là sessionStorage hoạt động hơi khác ở chỗ nó khác với chính cửa sổ trình duyệt. Điều đó có nghĩa là các tab hoặc cửa sổ khác trên cùng một tên miền không có quyền truy cập vào cùng một bản sao của đối tượng lưu trữ.