我运营一个网站,人们可以在其中打印文档(php/html/javascript)。
最新的 Safari 更新(Mac Sonoma、Safari V17.0)后,Safari 打开新选项卡后,打印窗口会丢失会话 cookie。
如何重复:
创建一个html文档./index.php,其中有一个带有
onclick="window.open('./anyfolder/printpage.php', '_blank');
的按钮
在此设置会话 cookie。
在 printpage.php 中添加带有
onclick="window.print();"
的打印按钮。
单击index.php 上的按钮。 Printpage.php 在新选项卡中打开。 Cookie 仍然存在。
单击 printpage.php 上的打印按钮。 Safari 打印窗口打开。等几秒钟。现在 Cookie 丢失了。
在任何其他浏览器上都不会发生。在 Safari 打印窗口打开之前,也不会发生这种情况。
如果您在单击 window.print 之前将打开的 printpage.php 选项卡拖到新窗口中,则会话 cookie 不会丢失。此外,如果您创建一个在新选项卡中打开 printpage.php 的表单,会话也不会丢失。
这个问题有解决办法吗?
我将同一个站点的 cookie 参数设置为“宽松”。
我尝试重现该行为,但失败了。 - 版本 17.0 (19616.1.27.211.1) - Apple M1
index.php
<?php
session_start();
?>
<button onclick="window.open('./printpage.php', '_blank');">Print preview</button>
printpage.php
<?php
session_start();
?>
<button onclick="window.print();">Print</button>
然后在我的浏览器中打开index.php(通过网络服务器)->单击第一个按钮->单击第二个按钮。会话 cookie 保持不变。
请使用我的确切代码示例重试,只是为了验证 Safari 中没有需要报告的错误。