Tôi có một lớp trình xử lý phiên gọi session_write_close() ở cuối tập lệnh. Điều này đảm bảo rằng ngay cả khi một tiêu đề() hoặc exit() được phát hành dữ liệu phiên được lưu.Sự cố PHP với các phiên đồng thời và AJAX
public function __destruct()
{
session_write_close();
}
Tuy nhiên, tôi đã nhận thấy rằng đối với một trong các trang AJAX của tôi HAI cập nhật phiên được lớp cơ sở dữ liệu cam kết.
Tôi đoán là trang [1] tải và gửi yêu cầu AJAX [2]. Yêu cầu AJAX [2] đó phải bắt đầu phiên trước khi trang [1] có cơ hội gọi session_write_close()
.
Sau khi trang [2] AJAX đã tải phiên rồi trang [1] cuối cùng lưu phiên và sau đó ngay sau khi [2] yêu cầu AJAX lưu phiên của nó - ghi đè phiên đầu tiên!
Nó có thể trông như thế này:
[1] page loads session
[1] page sends output
[2] ajax loads session
[1] page saves session
[2] ajax sends output
[2] ajax saves session
Tôi phải làm gì để đảm bảo một trang không tải một phiên trước khác có cơ hội để lưu phiên?
Điều này rất thú vị ... Tôi chưa bao giờ gặp vấn đề này (gõ vào silic) mặc dù tấn sử dụng ajax cho tất cả các mục đích để im quan tâm đến câu trả lời về điều này. – prodigitalson