Tôi đã có một thiết lập trong đó một trang web tạo ra các phân tích nội bộ về việc sử dụng trang web. Người dùng có thể yêu cầu tải xuống các phân tích cá nhân của họ và vì thông tin này rất nhạy cảm nên tôi không tạo bất kỳ tệp nào, tôi tạo tệp CSV trong một biến và sau đó "đẩy" nó cho người dùng bằng cách này:
function _cex_download( $output, $filename )
{
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: private");
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=$filename");
header("Accept-Ranges: bytes");
echo $output;
exit;
}
Điều này khiến trình duyệt của người dùng bật hộp thoại "lưu tệp" và người dùng sẽ nhận được tệp được tạo ở cuối của họ. Điều này hoạt động tốt, ngoại trừ quản trị viên của trang web có thể kích hoạt 'xuất khẩu phá hoại' - và trong tình huống đó tôi có một mẫu xác nhận phụ mà quản trị viên cần chấp nhận trước khi thực hiện xuất khẩu phá hoại.
Vấn đề là thói quen "tải xuống đẩy" này kết thúc quá trình xử lý trang Drupal. Không xuất hiện bất kỳ cách nào để chuyển hướng quản trị viên đến một số trang sau khi thói quen tải xuống được gọi đó. Quản trị viên nhận được hộp thoại 'lưu tệp' được bật bởi trình duyệt của họ, nhưng họ vẫn ở trên mẫu xác nhận.
Tôi đã thử đi theo con đường nhiều bước, nhưng sau một ngày lẩn quẩn với những chuyển hướng lạ, tôi đã thoát khỏi sự nhầm lẫn đó. Bắt đầu nhìn vào logic hình thức nhiều bước của ChaosTool. Nhưng một cái gì đó cho tôi biết rằng vấn đề thực sự là "tải xuống đẩy" này là một kẻ giết người theo quy trình có hướng dẫn.
Có lẽ hộp thoại xác nhận jquery chặn nhấp vào nút 'Xuất' ban đầu, thực hiện xác nhận hoàn toàn bằng javascript, quên đi việc có biểu mẫu xác nhận php / FAPI và khi người dùng xác nhận trong jquery tôi có thể gửi Xuất khẩu mà tôi đã chặn không?