【发布时间】:2021-01-29 18:56:38
【问题描述】:
我们正在使用的网站正在运行较旧的 HHVM 版本。 看PHP函数setcookie()的文档,参数有两个签名。
总结我不能使用setcookie()的问题是因为这个版本没有使用PHP7.3可用的$options数组。当尝试通过将 samesite 连接到 path 来使用某些替代解决方案时,将会崩溃 HHVM。使用这种替代方法使用普通 PHP 可以正常工作。
与 PHP 相比,此处使用 cookie 的 HHVM 行为似乎略有不同。
所以这个问题是关于 header() 而不是关于 setcookie() 因为我不能使用它,HHVM(运行的版本)略有不同) 处理 cookie。
注意:这是一个 Magento 1 站点 --- 升级到 HHVM 3.30+ 会破坏一切,所以这也不是一个选择 - 我已经尝试过了。
所以我设法通过连接所有属性使用header() 函数设置cookie。
header('Set-Cookie: frontend=abcdef; expires=188888888; path=/; domain=www.mydomain.com; SameSite=None; Secure');
响应标头中的结果:
frontend=abcdef; expires=188888888; path=/; domain=www.mydomain.com; Secure; SameSite=None
Set-Cookie 文档指的是这个:
您可能会注意到 expires 参数采用 Unix 时间戳,而不是日期格式 Wdy、DD-Mon-YYYY HH:MM:SS GMT,这是因为 PHP 在内部进行此转换。
问题
-
如何正确设置 expires 值,因为我正在创建一个 raw 标头而不是使用
setcookie(),UNIX 时间戳将在 cookie 中,如上所示,换句话说,setcookie()在内部转换 UNIX 时间戳... -
我也尝试了以下方法 - 但我不确定这对于
expires是否正确:需要什么格式?
示例:
php -a
php > $b = 3600 * 24 * 365;
php > $c = time() + $b;
php > echo $c;
1643355613
php > $dt = new DateTime();
php > $dt->setTimestamp($c);
php > echo $dt->format('Y-m-d H-i-s');
2022-01-28 09-40-13
不完全确定 expires 会正确使用该格式
这个问题与会话在某些情况下不起作用的问题有关,但我会将这些问题分开讨论。
【问题讨论】:
-
“需要什么格式?” - 你是不是直接引用了 setcookie 手册中的内容……?
-
也许应该澄清一下问题,允许哪些格式,哪些不允许......以及如何正确设置它们。
-
谢谢,这在
/Dateurl 中清除了它:“格林威治标准时间。HTTP 日期始终以格林威治标准时间表示,而不是本地时间”。我将研究如何在 PHP 中将 DateTime 转换为 GMT 时区 -
请注意,HHVM 3.30 一年多前 hhvm.com/blog/2018/12/17/hhvm-3.30.html 失去了支持,听起来您使用的版本比这更早!您正在运行的 HHVM 版本存在多个未修补的安全漏洞。你真的真的应该升级到 PHP 7 的现代版本(因为 HHVM 不再支持像 Magento 这样的原生 PHP 代码)。运行此类过时的软件会使您的客户面临风险!
标签: php magento cookies header hhvm