คุกกี้ Local Storage และ IndexedDB: เซสชันคืออะไรกันแน่

การล็อกอินเขียนลงสามที่แยกกัน การรู้ว่าอะไรคืออะไรอธิบายได้ว่าทำไมเซสชันรอดบางอย่างและพังเพราะบางอย่าง และทำไมการซิงก์โปรไฟล์ต้องย้ายทั้งสามอย่าง
"การล็อกอินอยู่" รู้สึกเหมือนสิ่งเดียว แต่จริง ๆ แล้วอย่างน้อยสามอย่าง เก็บในสามที่ต่างกันด้วยอายุการใช้งานสามแบบ และความแตกต่างนั้นอธิบายพฤติกรรมน่าสับสนส่วนใหญ่ที่คนเจอเมื่อย้ายเซสชันระหว่างเครื่อง
คุกกี้
คู่คีย์-ค่าขนาดเล็ก ส่งอัตโนมัติไปกับทุกคำขอไปยังไซต์ที่ตั้งมัน โทเค็นเซสชันมักอยู่ที่นี่
- ผูกกับโดเมนและพาธ พร้อมวันหมดอายุ
- คุกกี้ `Secure` ส่งผ่าน HTTPS เท่านั้น คุกกี้ `HttpOnly` มองไม่เห็นจาก JavaScript ของหน้าเว็บ
- คุกกี้เซสชันไม่มีวันหมดอายุและมีไว้ให้หายไปเมื่อปิดเบราว์เซอร์
คุกกี้เล็กที่สุดในสามอย่างและรับภาระมากที่สุด เสียไปแล้วคุณก็ถูกออกจากระบบ
Local Storage และ Session Storage
ที่เก็บคู่คีย์-ค่าแบบสตริง อ่านและเขียนโดย JavaScript ของหน้าเว็บ ผูกต่อ origin ไม่เคยส่งไปกับคำขอ หน้าเว็บต้องอ่านมันโดยตั้งใจ
แอปพลิเคชันเก็บค่ากำหนด รายละเอียดโปรไฟล์ที่แคช feature flag และมักมี refresh token ไว้ที่นี่ Local Storage คงอยู่จนกว่าจะถูกล้าง ส่วน Session Storage อยู่นานเท่าแท็บเท่านั้น
IndexedDB
ฐานข้อมูลจริงในเบราว์เซอร์ ระเบียนที่มีโครงสร้าง ดัชนี ทรานแซกชัน เว็บแอปพลิเคชันสมัยใหม่เก็บของที่มีน้ำหนักไว้ที่นี่ เช่น ประวัติข้อความที่แคช คิวออฟไลน์ และคีย์เข้ารหัสสำหรับฟีเจอร์ที่เข้ารหัสแบบ end-to-end
ทำไมเรื่องนี้สำคัญกับโปรไฟล์
มันให้ความหมายที่แม่นยำแก่คำว่า "การแยกสภาพแวดล้อม" สองโปรไฟล์ถูกแยกเมื่อทั้งสามอย่างนี้แยกกัน รวมถึงแคชและสถานะของส่วนขยาย เครื่องมือที่แยกคุกกี้แต่ใช้ IndexedDB ร่วมกัน แยกได้แค่หนึ่งในสามส่วนที่ง่ายของปัญหา
มันยังกำหนดมาตรฐานสำหรับการย้ายโปรไฟล์ระหว่างเครื่อง การพกแค่คุกกี้ทำซ้ำรูปร่างของเซสชันโดยไม่มีเนื้อแท้
| ที่เก็บ | เขียนโดย | โดยทั่วไปเก็บอะไร |
|---|---|---|
| คุกกี้ | เซิร์ฟเวอร์และสคริปต์ของหน้า | โทเค็นเซสชัน ค่ากำหนด ตัวระบุการติดตาม |
| Local Storage | สคริปต์ของหน้า | Refresh token สถานะ UI รายละเอียดโปรไฟล์ที่แคช |
| Session Storage | สคริปต์ของหน้า | สถานะต่อแท็บ ทิ้งเมื่อปิดแท็บ |
| IndexedDB | สคริปต์ของหน้า | ข้อมูลที่แคช คิวออฟไลน์ คีย์เข้ารหัส |
การย้ายเซสชันระหว่างเครื่องของคุณเอง
PowerOps บันทึกคุกกี้ Local Storage และ IndexedDB เมื่อโปรไฟล์ปิด และกู้คืนเมื่อเปิดที่อื่น แต่ละหมวดเป็นสวิตช์ สำหรับทั้งเวิร์กสเปซหรือสำหรับโปรไฟล์เดียว เพื่อให้คุณย้ายได้เท่าที่ตั้งใจ
สองคุณสมบัติที่ควรรู้เกี่ยวกับวิธีทำงาน
- สแนปช็อตถูกเข้ารหัสบนเครื่องต้นทางด้วยคีย์ที่เป็นของเวิร์กสเปซ และถอดรหัสบนเครื่องที่เปิดโปรไฟล์ นี่ไม่ใช่การเข้ารหัสแบบ end-to-end บริการเก็บสำเนาของคีย์นั้นไว้เพื่อให้คอมพิวเตอร์เครื่องอื่นของคุณได้รับ
- โปรไฟล์เปิดได้บนเครื่องเดียวในเวลาเดียว ขณะที่เปิดอยู่มันถือ lease และอุปกรณ์อื่นจะถูกบอกว่าอุปกรณ์ไหนถืออยู่ แทนที่จะได้รับอนุญาตให้แยกเซสชันออกเป็นสองสำเนาที่ต่างกัน
ข้อที่สองคือข้อจำกัดที่ตั้งใจ สองเครื่องที่แก้ไขเซสชันเดียวกันอย่างอิสระทำให้เกิดสองเซสชันที่ใช้ได้ครึ่งเดียว และบ่อยครั้งคือบัญชีที่ถูกออกจากระบบบนทั้งสองเครื่อง คุกกี้ไม่มีวิธีแก้ความขัดแย้งในการรวม
ข้อสรุปเชิงปฏิบัติ
ปิดโปรไฟล์ แทนที่จะฆ่ามัน การเขียนออกเมื่อปิดคือสิ่งที่ทำให้เซสชันย้ายได้ และเป็นนิสัยที่ถูกที่สุดในรายการนี้

