2010-11-17 25 views

Trả lời

135

Mỗi tên miền (cùng một quy tắc phân tách là same origin policy), để làm cho mỗi trang bạn phải sử dụng khóa dựa trên số location hoặc một số cách tiếp cận khác.

Bạn không cần 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.

+1

chính xác những gì tôi cần. –

+34

Nó là duy nhất cho mỗi kết hợp 'giao thức: // host: port'. – Thasmo

+4

Tôi đang bình luận ở đây để xác nhận rằng nó rất hữu ích khi biết rằng cổng có liên quan trong phạm vi. Hãy xem xét: dev server, 'localhost'. –

8

Vâng, mỗi tên miền/tên miền phụ có một khác nhau localStorage và bạn có thể gọi các phím bất cứ điều gì bạn muốn (tiền tố là không bắt buộc).

Để có được một chìa khóa bạn có thể sử dụng phím phương pháp (index) như

localStorage.key(0); 

Có một đối tượng gọi globalStorage trước, nơi bạn có thể có nhiều localStorages, nhưng nó đã bị phản đối từ các thông số kỹ thuật

5

Tôi luôn sử dụng tiền tố, chỉ để tránh xung đột tiềm năng với tập lệnh người dùng - điều này cũng có thể sử dụng localStorage.

+11

IMO Đó là tập lệnh người dùng nên tránh va chạm, chứ không phải các trang. Trong kịch bản người dùng của tôi, tôi đang sử dụng một tiền tố được đặt tên theo kịch bản lệnh. –

0

Nó có sẵn ở bất kỳ nơi nào trên miền đó như được Nick đề xuất, thay vào đó, sessionStorage hoạt động hơi khác ở chỗ nó khác với 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 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ữ đó.

9

Các cửa hàng đang mỗi gốc, nơi nguồn gốc cũng giống như đối với Same Origin Policy (một sự kết hợp của schema [http vs https, vv], cảng, và host). Từ the spec:

Mỗi ngữ cảnh duyệt cấp cao nhất có một nhóm vùng lưu trữ phiên duy nhất, mỗi vùng một nguồn gốc.

Như vậy, lưu trữ cho http://a.example.com và lưu trữ cho http://b.example.com riêng biệt (và chúng đều tách biệt với http://stackoverflow.com) như những người được tất cả các host khác nhau. Tương tự, http://example.com:80http://example.com:8080https://example.com là tất cả các nguồn gốc khác nhau.

Không có cơ chế nào được tích hợp vào bộ nhớ web cho phép một nguồn gốc truy cập bộ nhớ của người khác.

Lưu ý rằng nó có nguồn gốc , không URL, vì vậy http://example.com/page1http://example.com/page2 cả hai đều có quyền truy cập vào các lưu trữ cho http://example.com.

3

Như những người khác đã chỉ ra, localStorage là duy nhất cho mỗi giao thức, lưu trữ cổng &. Nếu bạn muốn có một cách tiện dụng để kiểm soát bộ nhớ của mình bằng các phím được đặt trước, tôi đề xuất localDataStorage.

Nó không chỉ giúp thực thi lưu trữ được chia sẻ trong cùng một tên miền bằng cách thêm tiền tố, nó còn lưu trữ rõ ràng các loại dữ liệu javascript (Mảng, Boolean, Date, Float, Integer, String và Object), cung cấp dữ liệu gọn gàng, tự động nén chuỗi và tạo điều kiện truy vấn bằng khóa (tên) cũng như truy vấn theo giá trị (khóa).

[SỰ TỪ BỎ] Tôi là tác giả của các tiện ích [/ SỰ TỪ BỎ]

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, 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 của bạn lưu trữ.

Các vấn đề liên quan