localStorage เป็นอย่างไร?


104

ฉันขึ้นอยู่กับ localStorage อย่างมากสำหรับปลั๊กอินที่ฉันเขียน การตั้งค่าผู้ใช้ทั้งหมดจะถูกเก็บไว้ในนั้น การตั้งค่าบางอย่างต้องการให้ผู้ใช้เขียน regex'es และพวกเขาจะเสียใจหากกฎ regex ของพวกเขาหายไปในบางจุด ตอนนี้ฉันสงสัยว่า localStorage นั้นคงอยู่แค่ไหน

จากรายละเอียด :

ตัวแทนผู้ใช้ควรหมดอายุข้อมูลจากพื้นที่จัดเก็บภายในเพื่อเหตุผลด้านความปลอดภัยหรือเมื่อผู้ใช้ร้องขอ

ข้างต้นดูเหมือนว่ามันจะทำงานเหมือนกับคุกกี้บนไคลเอนต์ กล่าวคือเมื่อผู้ใช้ล้างข้อมูลเบราว์เซอร์ทั้งหมด (ประวัติคุกกี้แคช ฯลฯ ) localStorage จะถูกตัดทอนด้วย สมมติฐานนี้ถูกต้องหรือไม่?


1
เมื่อพิจารณาว่าเบราว์เซอร์เป็นผู้ตัดสินใจว่าอะไรเป็น "เหตุผลด้านความปลอดภัย" ในโลกอุดมคติคุณคงไม่คิดว่ามันจะอยู่ได้นานมาก อย่างไรก็ตามอาจปลอดภัยที่จะสันนิษฐานว่ายังคงมีอยู่จนกว่าผู้ใช้จะล้างออกอย่างชัดเจน
Corbin

1
เพียงคำเตือนเดียวเมื่อใช้ localStorage: ดูเหมือนว่าจะทำงานได้ไม่น่าเชื่อถือใน Firefox 39, 38 และ 37 (เราไม่ได้ตรวจสอบอะไรที่เก่ากว่า) ในเครื่องของผู้ใช้ประมาณ 1% localStorage บางครั้งหายไประหว่างการเรียกดูไซต์ของเราในขณะที่คุกกี้เซสชันจะถูกเก็บรักษาไว้ ดูเหมือนเป็นข้อบกพร่องสำหรับฉัน
Andreas

1
@PeeHaa มันไม่ได้ทำงานเหมือนคุกกี้เท่านั้น แต่ถูกกำหนดตามกฎหมายว่าเป็น "คุกกี้"ด้วย ในความเป็นจริงข้อมูลการจัดเก็บจะแสดงควบคู่ไปกับคุกกี้อื่น ๆ ใน urlchrome:settings/cookies
Pacerier

คำตอบ:


70

Mozilla ใช้งานเหมือนคุกกี้:

สามารถล้างที่เก็บข้อมูล DOM ผ่าน "เครื่องมือ -> ล้างประวัติล่าสุด -> คุกกี้" เมื่อช่วงเวลาเป็น "ทุกอย่าง" (ผ่าน nsICookieManager :: removeAll)

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

ใน DOM Storage ไม่สามารถระบุระยะเวลาหมดอายุสำหรับข้อมูลใด ๆ ของคุณได้ กฎการหมดอายุทั้งหมดจะขึ้นอยู่กับผู้ใช้ ในกรณีของ Mozilla กฎเหล่านี้ส่วนใหญ่สืบทอดมาจากกฎการหมดอายุที่เกี่ยวข้องกับคุกกี้ ด้วยเหตุนี้คุณอาจคาดหวังว่าข้อมูล DOM Storage ส่วนใหญ่ของคุณจะคงอยู่อย่างน้อยก็เป็นระยะเวลาที่มีความหมาย

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

Chrome ใช้งานเหมือนแคช:

LocalStorage ไม่ใช่ที่เก็บข้อมูลที่ปลอดภัย

HTML5 จัดเก็บในท้องถิ่นจะบันทึกข้อมูลที่ไม่ได้เข้ารหัสในรูปแบบสตริงในแคชของเบราว์เซอร์ปกติ

วิริยะ

บนดิสก์จนกว่าผู้ใช้จะลบ (ลบแคช) หรือโดยแอป

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


สำหรับ "การแทนที่คุกกี้" ไม่ใช่ทั้งหมด

คุกกี้และพื้นที่เก็บข้อมูลในเครื่องมีจุดประสงค์ที่แตกต่างกันจริงๆ คุกกี้มีไว้สำหรับการอ่านฝั่งเซิร์ฟเวอร์เป็นหลัก LocalStorage สามารถอ่านได้เฉพาะฝั่งไคลเอ็นต์เท่านั้น คำถามคือในแอปของคุณใครต้องการข้อมูลนี้ - ไคลเอนต์หรือเซิร์ฟเวอร์


1
ฉันคิดว่าลิงก์ MDNนี้อธิบายได้ชัดเจนยิ่งขึ้น
Bo Lu

17

โดยทั่วไปคุณไม่ควรพึ่งพา Local Storage มากนัก

Local Storage พร้อมกับ Session Storage มีจุดมุ่งหมายเพื่อทดแทนคุกกี้โดยกำหนด API ที่สอดคล้องกันมากขึ้น มีความแตกต่างเล็กน้อยจากคุกกี้:

  • แม้ว่าคุกกี้จะสามารถเข้าถึงได้จากทั้งฝั่งไคลเอ็นต์และเซิร์ฟเวอร์ แต่โดยทั่วไป Web Storage และ Local Storage จะสามารถเข้าถึงได้จากฝั่งไคลเอ็นต์เท่านั้น
  • ความจุที่เพิ่มขึ้น (อย่างเป็นทางการสำหรับคุกกี้คือ 4 KB) เป็นมากกว่า 5MB ต่อโดเมน (Firefox, Google Chrome และ Opera และ 10MB ใน IE)

ดังนั้นใช่สมมติฐานของคุณถูกต้อง


1
+1 - นี่คือเหตุผลที่ฉันใช้ที่เก็บข้อมูลในเครื่องเป็นแคชและสำรองข้อมูลผู้ใช้บนเซิร์ฟเวอร์ (แน่นอนว่ามีกลไกการเข้าสู่ระบบอยู่แล้ว)
josh3736

2
Basically, you should not heavily depend on Local Storage.... เด็ดขาด !!
Tenali Raman

7

สิ่งหนึ่งที่ควรทราบเกี่ยวกับการใช้ที่เก็บข้อมูลในเครื่อง เป็นเบราว์เซอร์ที่เฉพาะเจาะจงมาก หากคุณจัดเก็บข้อมูลด้วย firefox จะไม่สามารถใช้งานได้ใน chrome หรือ ie เป็นต้นเท่าที่ล้างคุกกี้และเซสชันฉันสังเกตเห็นว่าเบราว์เซอร์เฉพาะเจาะจงด้วยว่าจะล้างที่เก็บข้อมูลในเครื่องหรือไม่ ฉันจะตรวจสอบรายละเอียดให้มากหากคุณกำลังวางแผนที่จะใช้พื้นที่เก็บข้อมูลในเครื่องสำหรับแอป


14
สิ่งนี้ไม่เป็นความจริงกับคุกกี้ใช่หรือไม่?
Jeffrey Sweeney

3
นี่เป็นความจริงสำหรับคุกกี้
Moshe L

ไม่สิ่งนี้ไม่จำเป็นสำหรับคุกกี้: บน OSX ดูเหมือนว่าแอปที่ใช้ Webkit จะแชร์คุกกี้ในประสบการณ์ของฉัน แม้ว่าฉันอาจตีความผลกระทบผิดพลาด
Thomas Tempelmann

ในทางกลับกันเขากำลังเขียนปลั๊กอินซึ่งฉันคิดว่าเป็นเบราว์เซอร์เฉพาะ
GuyT

5

Local Storage ได้รับการออกแบบให้เป็นที่เก็บข้อมูลถาวรที่เชื่อถือได้บนไคลเอนต์ มันไม่ได้ถูกออกแบบมาเป็น "คุกกี้ที่ดีกว่า": ฟังก์ชั่นที่ออกแบบมาเพื่อจะพบโดยการจัดเก็บเซสชัน

จากธันวาคม 2011 เว็บการจัดเก็บข้อมูลผู้สมัคร Spec คำแนะนำ ,

(Local Storage) ได้รับการออกแบบมาเพื่อการจัดเก็บที่ครอบคลุมหลายหน้าต่างและอยู่นานกว่าเซสชันปัจจุบัน โดยเฉพาะอย่างยิ่งเว็บแอปพลิเคชันอาจต้องการจัดเก็บข้อมูลผู้ใช้เป็นเมกะไบต์เช่นเอกสารที่ผู้ใช้เขียนขึ้นทั้งหมดหรือกล่องจดหมายของผู้ใช้ในฝั่งไคลเอ็นต์ด้วยเหตุผลด้านประสิทธิภาพ

ในฐานะข้อมูลฝั่งไคลเอ็นต์ - จะคงอยู่ตลอดเวลาเช่นเดียวกับข้อมูลฝั่งไคลเอ็นต์ใด ๆภายในขีด จำกัด ขนาดที่เบราว์เซอร์ใช้ ผู้ใช้สามารถลบได้ตลอดเวลาเปิดในโปรแกรมแก้ไขข้อความและแก้ไข ฯลฯ เช่นเดียวกับข้อมูลฝั่งไคลเอ็นต์ใด ๆ


1
บางทีสิ่งนี้อาจเปลี่ยนแปลงไปตั้งแต่โพสต์เดิมของคุณเมื่อ 8 ปีที่แล้ว แต่ Local Storage สามารถใช้แทนคุกกี้ได้มาก (ในกรณีที่จำเป็นต้องเข้าถึงเฉพาะฝั่งไคลเอ็นต์เท่านั้น) พื้นที่จัดเก็บเซสชันไม่สามารถ พื้นที่จัดเก็บเซสชันจะถูกลบทันทีที่ปิดเบราว์เซอร์
Brad

3

หากคุณใช้ localStorage สำหรับแอป iOS โปรดระวังให้มาก iOS เวอร์ชันล่าสุด (5.1 จากด้านบนของหัวของฉัน) ได้ย้ายข้อมูล localstorage และ localdb ไปยังส่วนหนึ่งของแคชที่ถูกล้างเป็นประจำกล่าวคือไม่คงอยู่ตลอดเวลา ฉันยังไม่สามารถบอกได้ว่านี่เป็นข้อบกพร่องหรือการเปลี่ยนแปลงนโยบาย


2
ฉันเชื่อว่านี่เป็นความจริงสำหรับ WebViews แต่ไม่ใช่ Safari
Trott
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.