Генерация 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
И все было хорошо, пока пользователи не начали замечать определенное поведение:
Браузер вместо сохранения 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. Мой вопрос «как».
Как? Что я могу сделать?
PDF вещь, безусловно, ошибка в браузере. но независимо от того, вы хотите использовать GET.
сообщение должно выполнить действие, и браузер правильно не повторяет этот запрос. Из вашего описания не похоже, что просмотр PDF выполняет действие.
если вы используете GET, это означает, что получите эти данные с этими параметрами. и браузер будет обрабатывать это соответственно.
если это результат действия, то разбейте действие и отчет на два запроса. например, для просмотра итогового отчета в формате PDF сделайте ссылку в ответе на действие. Вы можете увидеть эту модель, например, когда вы покупаете кого-то онлайн. запрос POST оплаты дает вам ссылку через GET на счет-фактуру.
Других решений пока нет …