Создание 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 с помощью скрипта
- Оставьте браузер бездействующим на некоторое время, занимаясь другими делами, пока SESSION не истечет за кулисами.
- Затем они используют функцию браузера «Сохранить как», чтобы сохранить 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. Мой вопрос "как".
Как? Что я могу сделать?