Không kéo dài tuổi thọ của cookie phiên thường. Cách chuẩn là tách làm hai token:
- Session cookie — ngắn (vài chục phút tới vài giờ), là thứ dùng cho mọi request.
- Remember-me token — dài (14–30 ngày), chỉ dùng một lần để tạo lại phiên khi session hết hạn.
Cách lưu remember-me token (mô hình selector/validator):
sql
create table remember_tokens (
selector text primary key, -- lookup key, sent in clear
validator_hash text not null, -- SHA-256 of the secret half
user_id uuid not null,
expires_at timestamptz not null
);
-- cookie value = selector + ':' + validatorTra bằng selector (có index), rồi so validator bằng hàm so sánh hằng thời gian. Tách hai nửa như vậy tránh việc phải tra cứu bằng chính giá trị bí mật, và DB không giữ token thô.
Các quy tắc kèm theo:
- Xoay token sau mỗi lần dùng — dùng xong thì xóa hàng cũ, phát hàng mới; token cũ tái xuất hiện là dấu hiệu bị đánh cắp.
- Cookie phải
HttpOnly; Secure; SameSite=Lax. - Đổi mật khẩu / đăng xuất mọi thiết bị phải xóa hết remember token của user.
- Phiên khôi phục từ remember-me chỉ nên được coi là đã xác thực ở mức thấp: các thao tác nhạy cảm (đổi mật khẩu, đổi email, thanh toán) phải yêu cầu nhập lại mật khẩu.
- Không nhét username/password hay bất kỳ dữ liệu tự giải mã được nào vào cookie.