Как преодолеть браузер & quot; Сохранить & quot; особенность после окончания сессии?

Генерация PDF зависит от $ _POST

Я генерирую PDF в своем браузере, используя скрипт PHP, где скрипт генерирования PDF зависит от переменных, отправленных ему через POST. Когда POST пуст, PDF не может быть сгенерирован, и он выдает предупреждение «PDF должен быть восстановлен».

В некоторых ситуациях POST-массив становится пустым, а именно, если по какой-либо причине я нажимаю кнопку «Обновить» в браузере, находясь на странице с PDF-файлом, данные POST не отправляются повторно, и не запрашивается повторная отправка, они просто становятся пустыми и скрипт обнаруживает это и выдается предупреждение. Предупреждение PDF Must be Regenerated, что я и положил, когда массив POST пуст в моем коде.

Обходной путь создания PDF зависит от $ _SESSION

Поэтому я решил сохранить данные POST в SESSION, а затем использовать SESSION, когда POST пуст. Как ниже:

if (empty($_POST))
{
// try restore from session first
$_POST['product_count'] = $_SESSION['product_count'];

if (empty($_POST['product_count'])) // if we failed.. session is empty
{
print 'PDF Must be Regenerated';
exit();
}
}
else
{
//save POST into SESSION
$_SESSION['product_count'] = $_POST['product_count'];
}

Функция сохранения в браузере пытается сгенерировать PDF после истечения SESSION

И все было хорошо, пока пользователи не начали замечать определенное поведение:

  1. Они генерируют PDF, используя скрипт
  2. Оставьте браузер без дела какое-то время, занимаясь другими делами, пока сессия не закончится за кулисами.
  3. Затем они используют функцию браузера «Сохранить как» для сохранения PDF.

Браузер вместо сохранения PDF из памяти (PDF все еще виден внутри браузера), браузер, который использует наша компания (Mozilla), отправляет запрос на сервер, запрашивая новую новую копию PDF. Но … при этом POST пусто, потому что POST не посылается повторно, а SESSION пусто, потому что SESSION истек на этапе ожидания.

Это приводит к повреждению PDF, где PDF на самом деле представляет собой текстовый файл ASCII, содержащий слова PDF Must be Regenerated, Пользователи не замечают этого, пока не станет слишком поздно.

Но Mozilla, очевидно, обращается к серверу, PHP-скрипты проходят проверку учетных данных для входа в систему, но при этом все пустые POST и SESSION приводят к повреждению PDF.

Проверка учетных данных не зависит от SESSION, и, честно говоря, я пока не могу сказать, от чего это зависит, потому что я не могу легко воспроизвести проблему, поэтому я не могу легко протестировать.

Обходным решением является сохранение PDF вскоре после его создания, до истечения срока действия SESSION, но пользователь «всегда прав», и я хочу позволить пользователю иметь возможность сохранять PDF даже после истечения срока SESSION. Мой вопрос «как».

Как? Что я могу сделать?

0

Решение

PDF вещь, безусловно, ошибка в браузере. но независимо от того, вы хотите использовать GET.

сообщение должно выполнить действие, и браузер правильно не повторяет этот запрос. Из вашего описания не похоже, что просмотр PDF выполняет действие.

если вы используете GET, это означает, что получите эти данные с этими параметрами. и браузер будет обрабатывать это соответственно.

если это результат действия, то разбейте действие и отчет на два запроса. например, для просмотра итогового отчета в формате PDF сделайте ссылку в ответе на действие. Вы можете увидеть эту модель, например, когда вы покупаете кого-то онлайн. запрос POST оплаты дает вам ссылку через GET на счет-фактуру.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]