Dùng cái gì thay thế Local Storage
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ó
httpOnly
cookie 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
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