PHP setcookie函数不支持httponly或安全参数

PHP setcookie函数不支持httponly或安全参数,php,google-chrome,cookies,httponly,hsts,Php,Google Chrome,Cookies,Httponly,Hsts,我不知道为什么会发生这种情况,也不知道如何解决 我可以运行以下命令: 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;Sec

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

我可以运行以下命令:

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和secure的标志,即使我明确告诉它不要使用这些标志

为什么会发生这种情况,我该如何解决

这是PHP7.1

如果有必要的话,可以通过https访问该站点

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

编辑2: 我可以通过在javascript中设置cookie来解决这个问题。这阻止了我阅读cookieJavaScript,这正是我需要它的地方。这个域在HSTS预加载列表中,所以我感觉chrome添加了这个标志,因为它知道这个域是安全的。我不知道为什么它允许javascript不修改它们


是否有人有任何关于HSTS预加载及其效果的信息(如果有)在
set cookie
标题上?

我认为有趣的是,在分号周围没有空间放置最后两个标志。这表明了三个原因之一:

  • 这是您在创建问题时犯的一个不重要的打字错误
  • PHP很奇怪。我不使用它,所以不排除可能性
  • PHP之外的其他东西正在设置这些属性
  • 使用此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之外使用类似的东西来设置这些属性?

    我认为有趣的是,分号周围没有空间来放置最后两个标志。这表明了三个原因之一:

  • 这是您在创建问题时犯的一个不重要的打字错误
  • PHP很奇怪。我不使用它,所以不排除可能性
  • PHP之外的其他东西正在设置这些属性
  • 使用此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之外设置这些属性?

    在HSTS站点上使用不安全的cookie时,您想做什么?这基本上是一个矛盾,至少在第一次访问之后。因为我需要检查javascript中的cookie,如果cookie仅为HTTP,则无法读取脚本语言中的cookie。与Its无关的安全性只是用户以前执行过某项功能的指示器。我认为可以用不同的方式处理,但这真的不重要,也不值得付出额外的努力。我宁愿知道这是如何工作的,或者问题是什么;困扰我的是那个“安全”的。无论如何,您是否尝试更改
    会话.cookie\u httponly
    配置选项?也许出于某种原因,它占据了优先地位。你想在HSTS网站上用一个不安全的cookie做什么?这基本上是一个矛盾,至少在第一次访问之后。因为我需要检查javascript中的cookie,如果cookie仅为HTTP,则无法读取脚本语言中的cookie。与Its无关的安全性只是用户以前执行过某项功能的指示器。我认为可以用不同的方式处理,但这真的不重要,也不值得付出额外的努力。我宁愿知道这是如何工作的,或者问题是什么;困扰我的是那个“安全”的。无论如何,您是否尝试更改
    会话.cookie\u httponly
    配置选项?也许出于某种原因,它处于优先地位。除非apache在我不知情的情况下这样做,否则我对此表示怀疑。我觉得chrome正在这么做。我还没有检查curl中的标题,但这将是我有时间时的下一个测试。(因为HSTS预加载而使用chrome)PS,这不是打字错误,chrome inspector就是这么说的。是的,curl会证明这一点,但我真的怀疑这是chrome。检查您的Apache配置,看看是否有人添加了类似于上述内容的内容。除非Apache在我不知情的情况下这样做,否则我对此表示怀疑。我觉得chrome正在这么做。我还没有检查curl中的标题,但这将是我有时间时的下一个测试。(因为HSTS预加载而使用chrome)PS,这不是打字错误,chrome inspector就是这么说的。是的,curl会证明这一点,但我真的怀疑这是chrome。检查您的Apache配置,查看是否有人添加了类似于上述内容的内容。