PDF生成取决于$ _POST
我在浏览器中使用PHP脚本生成PDF,其中PDF生成脚本依赖于通过POST发送给它的变量。当POST为空时,无法生成PDF并发出警告说" PDF必须重新生成"。
某些情况触发了POST数组为空,即如果我在使用PDF的页面上点击浏览器的刷新按钮,无论出于何种原因,POST数据都不会重新发送,并且没有提示让我重新发送它,它只是变空,脚本检测到它并发出警告。警告是PDF Must be Regenerated
,这是我在代码中POST数组为空时放入的内容。
PDF生成变通方法取决于$ _SESSION
所以我做的解决方法是将POST数据保存到SESSION,然后在POST为空时使用SESSION。如下所示:
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'];
}
浏览器的保存功能尝试在SESSION过期后生成PDF
在用户开始注意到某种行为之前,一切都很顺利:
浏览器不是从内存中保存PDF(PDF在浏览器中仍然可见),我们公司使用的浏览器(Mozilla)向服务器发出请求,要求提供新的PDF副本。但是......当这样做时,POST是空的,因为POST没有被重新发送,并且SESSION是空的,因为SESSION在空闲阶段已经过期。
这会导致PDF损坏,其中PDF实际上是包含单词PDF Must be Regenerated
的ASCII文本文件。用户没有注意到它,直到为时已晚。
但是,Mozilla显然是在调用服务器,PHP脚本通过用户登录凭据测试,但是一直有空POST和SESSION,导致PDF损坏。
登录凭据检查不依赖于SESSION,说实话我还不知道它依赖于什么,因为我无法轻易地重现该问题,因此我无法轻易测试。
解决方法显然是在生成后很快保存PDF,在SESSION到期之前,但用户总是正确的#34;我想让用户即使在SESSION过期时也可以保存PDF。我的问题是"怎么"。
如何?我该怎么办?
答案 0 :(得分:0)
pdf似乎肯定是浏览器上的一个错误。但无论如何,你想使用GET。
post是执行操作,浏览器正确不会重新发出该请求。根据你的描述,似乎没有看到pdf正在执行一个动作。
如果您使用GET,则意味着使用这些参数获取此数据。并且浏览器将相应地处理它。
如果是操作的结果,则将操作和报告分成两个请求。例如,在生成的PDF报告中查看操作响应中的链接。例如,当你在网上买某人时,你可以看到这种模式。付款POST请求通过GET为您提供发票的链接。