วัตถุ HTML5 localStorage แยกได้ต่อหน้า / โดเมนหรือไม่ ฉันสงสัยเพราะฉันจะตั้งชื่อคีย์ localStorage ได้อย่างไร ฉันต้องการคำนำหน้าแยกต่างหากหรือไม่ หรือฉันจะตั้งชื่อพวกเขาในสิ่งที่ฉันต้องการ?
วัตถุ HTML5 localStorage แยกได้ต่อหน้า / โดเมนหรือไม่ ฉันสงสัยเพราะฉันจะตั้งชื่อคีย์ localStorage ได้อย่างไร ฉันต้องการคำนำหน้าแยกต่างหากหรือไม่ หรือฉันจะตั้งชื่อพวกเขาในสิ่งที่ฉันต้องการ?
คำตอบ:
เป็นต่อโดเมนและพอร์ต (กฎการแยกเดียวกันกับนโยบายกำเนิดเดียวกัน ) เพื่อให้ต่อเพจคุณจะต้องใช้รหัสตามlocation
หรือวิธีการอื่น
คุณไม่จำเป็นต้องมีคำนำหน้าให้ใช้หากคุณต้องการ นอกจากนี้คุณยังสามารถตั้งชื่อสิ่งที่คุณต้องการ
protocol://host:port
รวมกัน
ร้านค้ามีต่อต้นทางโดยที่ "แหล่งกำเนิด" เป็นเช่นเดียวกับนโยบายแหล่งกำเนิดสินค้าเดียวกัน (รวมถึงสคีมา [ http
vs. https
, ฯลฯ ], พอร์ตและโฮสต์) จากสเป็ค :
บริบทการสืบค้นระดับบนสุดแต่ละอันมีชุดของพื้นที่เก็บข้อมูลเซสชันที่ไม่ซ้ำกันหนึ่งรายการสำหรับแต่ละจุดเริ่มต้น
ดังนั้นที่เก็บข้อมูลhttp://a.example.com
และที่เก็บข้อมูลhttp://b.example.com
แยกต่างหาก (และทั้งคู่แยกต่างหากhttp://example.com
) เนื่องจากเป็นโฮสต์ที่แตกต่างกันทั้งหมด ในทำนองเดียวกันhttp://example.com:80
และhttp://example.com:8080
และhttps://example.com
มีต้นกำเนิดที่แตกต่างกันทั้งหมด
ไม่มีกลไกที่สร้างไว้ในที่เก็บข้อมูลเว็บที่อนุญาตให้แหล่งกำเนิดหนึ่งเข้าถึงแหล่งเก็บข้อมูลอื่นได้
โปรดทราบว่าต้นกำเนิดไม่ URL ดังนั้นhttp://example.com/page1
และทั้งสองมีการเข้าถึงที่จัดเก็บข้อมูลสำหรับhttp://example.com/page2
http://example.com
ใช่แต่ละโดเมน / โดเมนย่อยมีlocalStorage ที่แตกต่างกันและคุณสามารถโทรหาคีย์ได้ตามที่คุณต้องการ (ไม่ต้องใช้คำนำหน้า)
ในการรับรหัสคุณสามารถใช้ปุ่มวิธี (ดัชนี) เช่น
localStorage.key(0);
มีวัตถุที่เรียกว่าglobalStorageก่อนที่คุณจะมีหลาย localStorages ได้ แต่มันถูกคัดค้านจากข้อกำหนด
ตามที่คนอื่น ๆ ได้ระบุไว้ localStorage นั้นไม่ซ้ำกันต่อโปรโตคอลโฮสต์และพอร์ต หากคุณต้องการเป็นวิธีที่สะดวกในการควบคุมการจัดเก็บข้อมูลของคุณด้วยปุ่มนำหน้าผมขอแนะนำให้localDataStorage
ไม่เพียงช่วยในการบังคับใช้พื้นที่จัดเก็บข้อมูลแบบแบ่งส่วนภายในโดเมนเดียวกันโดยใช้คีย์นำหน้า แต่ยังเก็บประเภทข้อมูลจาวาสคริปต์ (Array, Boolean, Date, Float, Integer, String และ Object) ให้ข้อมูลที่ไม่ชัดเจนบีบอัดสตริงโดยอัตโนมัติและ อำนวยความสะดวกในการสืบค้นโดยใช้คีย์ (ชื่อ) เช่นเดียวกับค่าการสืบค้นโดย (คีย์)
[การปฏิเสธความรับผิด] ฉันเป็นผู้เขียนโปรแกรมอรรถประโยชน์ [/ การปฏิเสธความรับผิด]
ตัวอย่าง:
// 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
อย่างที่คุณเห็นค่าดั้งเดิมนั้นได้รับการเคารพและคุณสามารถสร้างหลาย ๆ กรณีเพื่อควบคุมที่เก็บข้อมูลของคุณ
มันสามารถใช้ได้ทุกที่บนโดเมนนั้นตามที่ Nick แนะนำเนื่องจากเป็นทางเลือกหนึ่งที่มี sessionStorage ทำงานแตกต่างกันเล็กน้อยซึ่งแตกต่างจากหน้าต่างเบราว์เซอร์เอง กล่าวคือแท็บหรือหน้าต่างอื่น ๆ ในโดเมนเดียวกันไม่มีสิทธิ์เข้าถึงสำเนาเดียวกันของวัตถุหน่วยเก็บข้อมูล