【问题标题】:IE not resending cookies when printing打印时 IE 不重新发送 cookie
【发布时间】: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


【解决方案1】:

经过研究,IE 似乎无法在打印时在未缓存图像的请求标头中发送 cookie 数据。为了解决这个问题,我使用window.onbeforeprint 事件将cache=true 参数添加到我的图像URL。在后端,我为要在短时间内缓存的图像设置标题。虽然这并不能解决问题(因为我不相信有真正的解决方法),但它确实规避了问题,并且 IE 能够打印图像。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-07
    • 2011-02-07
    • 2016-01-15
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    相关资源
    最近更新 更多