Vấn đề
Tôi nhận được nhiều tiêu đề HTTP bằng nhau trong các phản hồi của ứng dụng web. Đôi khi, đó là hàng tá bản sao tùy thuộc vào tập lệnh được gọi.
Cài đặt
Đó là một ứng dụng dựa trên PHP lớn và rất cũ. Nó được phân phối bằng Apache HTTPD 2.4 (Debian) bằng cách sử dụng php7_module mô-đun.
Ứng dụng này có một số mã thư viện xử lý thông tin phiên. Trong mã này, nó kết thúc việc xử lý với phiên_bắt đầu();
và session_write_close();
.
Nỗ lực của tôi
Tìm kiếm
Tôi đã đọc về vấn đề này và điều tôi học được là quá trình gói được thực hiện để bỏ chặn đối tượng phiên, để các phần khác của ứng dụng cũng có thể đọc và ghi vào đối tượng đó. Đây dường như là một kỹ thuật trong nhiều ứng dụng.
Tôi cũng đã đọc về một lỗi trong PHP gây ra hành vi chính xác này. Trên thực tế, đã có một số báo cáo lỗi trong nhiều năm mà tôi đã tìm thấy. Một báo cáo ví dụ: https://bugs.php.net/bug.php?id=38104
Tất cả các báo cáo được đóng lại và giải quyết. Nó được cho là không còn là một lỗi thực sự trong PHP nữa. Tôi cũng đọc được rằng nó dường như chỉ xảy ra khi sử dụng mô-đun Apache HTTPD PHP chứ không phải khi gọi trực tiếp PHP.
PHP
Tôi đã thử một giải pháp có lập trình trong đó tôi chỉ lặp lại các tiêu đề ở cuối tập lệnh "xem" và đảm bảo rằng chỉ có một đặt cookie
tiêu đề. Tuy nhiên, đây không phải là giải pháp thực sự vì có hàng trăm lượt xem và nó sẽ phải xảy ra trên từng lượt xem hiện tại và trong tương lai.
ghi chú tiêu đề HTTPD
Tôi đã cố gắng tận dụng mod_headers Ghi chú
lệnh từ chỉ thị tiêu đề, nhưng tôi chưa thể làm cho nó hoạt động được.
Ghi chú tiêu đề Set-Cookie đã lưu_cookie
Bỏ đặt tiêu đề Set-Cookie
Bộ tiêu đề Set-Cookie "%{saved_cookie}n"
Tôi thực sự không tìm thấy bất kỳ ví dụ hay nào về cách sử dụng nó. Tôi cũng không biết liệu các ghi chú có thể được sử dụng theo cách này hay không.
Câu hỏi
Có ai biết giải pháp về cách khắc phục điều này có thể bằng cấu hình của HTTPD hoặc bất kỳ thứ gì có thể được thực hiện một lần không.