Dùng gì để lưu trữ data thay thế local storage?

Dùng cái gì thay thế Local Storage

Pointing Man

Với quá nhiều nhược điểm như vậy thì nên sử dụng cái nào thay thế đây. Dưới đây là một vài phương pháp thay thế cho bạn.

Data nhạy cảm

Nếu bạn cần lưu trữ dạng này, bạn nên dùng một server-side session. Nó bao gồm:

  • Các user ID
  • Session ID
  • JWT
  • Info cá nhân
  • Info credit card
  • API keys
  • Và những thứ bạn không muốn share công khai trên Facebook

Nếu bạn cần store thông tin nhạy cảm, đây là cách bạn nên làm:

  • Khi một user log vào website của bạn, tạo một session identifier và lưu trữ nó lên một cookie. Nếu bạn đang dùng web framework, hãy tìm “cách tạo user session dùng cookies” và làm theo hướng dẫn.
  • Đảm bảo rằng bất kì thư viện cookie của web framework của bạn dùng đều có httpOnlycookie flag. Flag này làm cho browser không thể đọc cookies, để dùng server-side sessions an toàn bằng cookies.
  • Đảm bảo rằng cookie library cũng có cài SameSite=strict cookie flag (để tránh bị tân công CSRF), cũng như secure=true flag (đảm bảo cookies chỉ được cài qua kết nối được mã hóa).
  • Cứ mỗi lần user gửi request đến site của bạn, dùng session ID của họ (extract từ cookie họ gửi) để lấy account detail hoặc từ database hoặc từ cache (phụ thuộc vào độ lớn của website).
  • Một khi bạn lấy được thông tin account của user, bạn có thể lấy bất kì data nào bằng nó.

Pattern này rất đơn giản, trực tiếp, và quan trọng nhất là: secure. Và bạn còn có thể scale up trang web sử dụng pattern này. Đừng nói tôi rằng các JWTs “nhanh” và “độc lập” và bạn phải dùng local storage để store chúng: bạn sai rồi!

Non-String Data

Nếu bạn cần store data trong browser mà không nhạy cảm và không thuần string, sự lựa chọn tốt nhất cho bạn là IndexedDB. Đây là một API để bạn làm việc với object thuộc database lưu trữ trong browser.

Điều tuyệt vời về IndexedDB đó là có thể dùng nó để lưu trữ thông tin loại: số nguyên, float, etc. Bạn có thể xác định các key chính, xử lý indexing, và tạo giao dịch để ngăn chặn vấn đề hợp nhất dataa.

Bạn có thể xem nhiều tutorial về IndexedDB trên Google tutorial này.

Offline Data

Nếu bạn cần app chạy offline, option tốt nhất đó là dùng combination của IndexedDB và Cache API (một phần của Service Workers).

Cache API cho phép bạn cache network resources mà app cần load.

Bạn có thể xem nhiều tutorial về Cache API trên Google tutorial này.

Lời cuối

Happy Rage Face

Bây giờ sau khi đã nói về local storage, tôi hi vọng bạn đã hiểu tại sao bạn không nên sử dụng đó nữa.

Bạn vẫn có thể sử dụng nó để lưu trữ thông tin công khai đảm bảo:

  • Thông tin không quá nhạy cảm
  • Không dùng cho các app lớn
  • Không lớn hơn quá 5MB
  • Chứ string data

Còn lại thì làm ơn đừng dùng local storage! Dùng tool đúng cho từng mục đích.

Và bất kể bạn làm gì, đừng lưu trữ session info (như JSON Web Tokens) trong local storage. Đây là một ý rất tồi và sẽ đưa bạn đến hàng loạt cuộc tấn công có thể ảnh hưởng nặng đến user.

TopDev