【发布时间】:2023-03-25 19:56:01
【问题描述】:
我有一个由 PHP 页面 request.php 动态渲染的图像。由于其包含的数据的性质,无法缓存此图像。 request.php 呈现的图像取决于用户的 cookie。当我从 IE8 和 IE9 打印时,在尝试下载 request.php 返回的图像时,这些 cookie 不会在请求标头中发送。我通过使用 Fiddler 和监视请求/响应标头来确定这一点。
我的第一个想法是把cookie信息放在request.php的URL中,但是这样做有问题。我设置的 cookie 是使用 httponly 标志集创建的(出于安全原因)。换句话说,我无法从脚本访问此 cookie。我确实使用 jQuery 使用 $("#myimage").attr("src", "request.php?d=" + dynamically_set_data_string); 之类的东西设置图像的源 由于 httponly 标志,无法将任何 cookie 信息附加到此 jQuery 调用。
我无法使用 base64 将图像数据直接包含在 src 属性中,因为图像太大(IE8 有 32KB 限制)。
是否有一种技巧可以强制 IE 在打印/打印预览期间对未缓存图像的请求中发送 cookie?
【问题讨论】:
-
这个问题不是更普遍吗 - IE 在打印时根本不会重新请求整个资源,而是从它存储在缓存中的副本进行操作?我不认为这是可以规避的......
-
我专门设置了标头不缓存返回的图像(其内容可以随时更改)。 IE 在打印时确实会重新请求图像,但不会在重新请求中重新发送 cookie。
-
我认为除了生成一次性令牌之外没有其他解决方案,将其存储在
SESSIONID旁边的某个位置,然后将其附加到图像的src然后将其作为GET参数检索,最后使其无效unset。 -
@Ed 我并不是要阻止人们打印图像。我希望它打印出来。只是IE在打印预览/打印过程中请求下载图片时没有重新发送cookie。
-
我想知道使用缓存版本是否会有所帮助。查看页面时,缓存生成的图像并使用嵌入式查询字符串参数检索?我猜基本上是@Adnan 所说的。
标签: php jquery internet-explorer cookies printing