我不知道为什么会这样或如何解决。
我可以运行:
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
如您所见,即使我明确告诉它不要使用那些标志,它也会强制仅http和安全标志。
为什么会这样,我该如何解决?
这是PHP 7.1
如果需要的话,可以通过https访问该网站。
编辑: 我们在.htaccess文件上使用Strict-Transport-Security标头。我尝试将其注释掉,但似乎没有任何效果。
EDIT2: 我可以通过仅在javascript中设置cookie来解决此问题。这使我无法读取需要它的cookie javascript。该域位于HSTS预加载列表中,因此我感觉chrome正在添加此标志,因为它知道此域是安全的。我不确定为什么它允许javascript将它们设置为未修改。
有人在set-cookie
标头上有任何有关HSTS预加载及其效果的信息吗?
答案 0 :(得分:0)
我认为有趣的是,最后两个标志的分号周围没有空格。这表明了以下三个原因之一:
I created a way of forcing these flags in Apache even if the backend process creating the cookies didn’t set them使用以下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外部设置这些属性?