Vâng, không phải lúc nào. Sử dụng cookie, bạn là tốt. Nhưng "tôi có thể dựa vào id một cách an toàn không" thúc giục tôi mở rộng cuộc thảo luận với một điểm quan trọng (chủ yếu để tham khảo, vì số lượng khách truy cập của trang này có vẻ khá cao).
PHP có thể được cấu hình để duy trì các phiên bằng cách viết lại URL, thay vì cookie. ( Làm thế nào tốt hay xấu (<- xem ví dụ bình luận cao nhất ở đó) là một câu hỏi riêng biệt , bây giờ hãy bám sát câu hỏi hiện tại, chỉ với một lưu ý phụ: vấn đề nổi bật nhất với các phiên dựa trên URL - vấn đề trắng trợn khả năng hiển thị của ID phiên trần - không phải là vấn đề với các cuộc gọi Ajax nội bộ, nhưng sau đó, nếu nó được bật cho Ajax, thì nó cũng được bật cho phần còn lại của trang web, vì vậy ...)
Trong trường hợp các phiên viết lại URL (không nấu ăn), các lệnh gọi Ajax phải tự chăm sóc nó rằng các URL yêu cầu của chúng được tạo đúng. (Hoặc bạn có thể cuộn giải pháp tùy chỉnh của riêng bạn Bạn thậm chí có thể nghỉ mát để duy trì phiên. Về phía khách hàng , trong trường hợp ít đòi hỏi.) Vấn đề là các dịch vụ chăm sóc rõ ràng cần thiết cho phiên liên tục, nếu không sử dụng cookie:
Nếu các cuộc gọi Ajax chỉ trích xuất các URL nguyên văn từ HTML (như đã nhận được từ PHP), thì điều đó sẽ ổn, vì chúng đã được nấu chín (umm, đã nấu chín).
Nếu họ cần tự lắp ráp các URI yêu cầu, ID phiên cần được thêm vào URL theo cách thủ công. (Kiểm tra tại đây hoặc các nguồn trang được tạo bởi PHP ( có viết lại URL ) để xem cách thực hiện.)
Từ OWASP.org :
Thực tế, ứng dụng web có thể sử dụng cả cơ chế, cookie hoặc tham số URL hoặc thậm chí chuyển từ cái này sang cái khác (viết lại URL tự động) nếu đáp ứng một số điều kiện (ví dụ: sự tồn tại của máy khách web không hỗ trợ cookie hoặc khi không có cookie được chấp nhận do những lo ngại về quyền riêng tư của người dùng).
Từ một bài đăng trên diễn đàn Ruby :
Khi sử dụng php với cookie, ID phiên sẽ tự động được gửi trong các tiêu đề yêu cầu ngay cả đối với Ajax XMLHttpRequests. Nếu bạn sử dụng hoặc cho phép các phiên php dựa trên URL, bạn sẽ phải thêm id phiên vào mỗi url yêu cầu Ajax.
HttpOnly
cờ khi đặt cookie, điều đó có nghĩa là Javascript của bạn sẽ không thể nhìn thấy cookie. Tuy nhiên, cookie vẫn sẽ được gửi cho cả AJAX và các yêu cầu trang thông thường và tiếp tục hoạt động giống hệt nhau. Javascript của bạn sẽ không nhìn thấy nó trongdocument.cookie
.