php setCookie功能不尊重httponly或安全参数



我不知道为什么会发生这种情况或如何解决。

我可以运行:

setcookie('cookie_name', 1, time()+86400*365*2, "/", ".domain.com", false, false);

加载脚本时,我会在响应标题中得到这个:

cookie_name=1; expires=Fri, 19-Feb-2021 19:08:57 GMT; Max-Age=63072000; path=/; domain=.domain.com;HttpOnly;Secure

您可以看到,即使我明确告诉它不使用那些标志,它也强迫httponly且安全的标志。

为什么会发生这种情况?我该如何修复?

这是PHP 7.1

如果很重要,则通过HTTP访问该网站。

编辑:我们在.htaccess文件上使用了严格的传输 - 安全标头。我尝试评论它,但似乎没有任何效果。

edit2:我只需在JavaScript中设置cookie即可解决此问题。这阻止了我阅读我需要的cookie javascript。该域位于HSTS预紧列表中,因此我感觉到Chrome正在添加此标志,因为它知道此域是安全的。我不确定为什么它允许JavaScript设置未修改。

有人在set-cookie标头上有任何有关HSTS预紧力及其效果的信息吗?

我认为有趣的是,对于最后两个标志,半彩色周围没有空间。这表明了三个原因之一:

  1. 这是您在创建问题时做的不重要的错别字。
  2. PHP很奇怪。我不使用它,所以不要消除可能性的领域。
  3. PHP以外的其他东西正在设置这些属性。

我创建了一种在Apache中强制这些标志的方法,即使创建cookie的后端进程没有使用此apache配置设置它们:

# Rewrite any session cookies to make them more secure
# Make ALL cookies created by this server are HttpOnly and Secure
# (except the SPECIAL-CLIENT cookie and OTHER-COOKIE which can't be HttpOnly and is already set to Secure)  
Header edit Set-Cookie ^((?!(SPECIAL-CLIENT|OTHER-COOKIE).*)$ $1;HttpOnly;Secure
#Strip off double Secure or HttpOnly settings as if App and Apache sets above you can sometimes get both
Header edit Set-Cookie ^(.*);s?Secure;?s?(.*);s?Secure;?s?(.*)$ "$1; $2; $3; Secure"
Header edit Set-Cookie ^(.*);s?HttpOnly;?s?(.*);s?HttpOnly;?s?(.*)$ "$1; $2; $3; HttpOnly"
#Strip off double ;; settings
Header edit Set-Cookie ^(.*);s?;s?(.*)$ "$1; $2"

您是否有可能使用类似的东西或类似于设置PHP之外的这些属性?

最新更新