Có thể chuyển hướng sau khi người dùng đẩy một tập tin cho người dùng không?


7

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?

Câu trả lời:



3

Theo tôi biết, điều đó là không thể. Bạn có thể gửi nội dung (trong trường hợp của bạn là một tệp) hoặc chuyển hướng. Không phải cả hai. Đây là một hạn chế của giao thức HTTP


2

Tôi nghĩ rằng cách tốt nhất của bạn có thể là tạo mã thông báo khi người dùng gửi biểu mẫu và sau đó có mã thông báo lưu trữ tất cả thông tin cần thiết để tạo tệp CSV. Có biểu mẫu chuyển hướng người dùng đến trang thích hợp và sử dụng drupal_set_message () để cung cấp liên kết có chứa mã thông báo.

Khi nhấp vào liên kết, tệp CSV có thể được tạo và gửi cho người dùng tại thời điểm đó. Cấp, nó phức tạp hơn so với việc tạo nó trên biểu mẫu gửi, nhưng như Fuzzy76 nói, bạn đang chống lại giới hạn của giao thức HTTP. Làm theo cách này có thể đơn giản hơn là cố gắng tạo ra một giải pháp dựa trên JavaScript.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.