Php 当httponly为true时,Cookies会阻止setcookie()删除

Php 当httponly为true时,Cookies会阻止setcookie()删除,php,cookies,httponly,Php,Cookies,Httponly,我使用cookies实现“记住我”选项,以便登录我的网站。设置cookie工作正常。不安定的情绪过去常起作用。然后我制作了一个新版本的网站,只有httponly cookies;注销在本地主机上有效,但在服务器上无效。我在目录“test”中运行新代码;我仍然可以使用旧代码,在旧登录函数(不是新函数)中设置的cookies中运行良好 为了以防万一这可能很重要,并且为了证明我在解决类似问题的答案中没有解决任何常见问题,或者在取消设置cookie的相对时间内没有解决任何常见问题,我显示了我的代码。首先

我使用cookies实现“记住我”选项,以便登录我的网站。设置cookie工作正常。不安定的情绪过去常起作用。然后我制作了一个新版本的网站,只有httponly cookies;注销在本地主机上有效,但在服务器上无效。我在目录“test”中运行新代码;我仍然可以使用旧代码,在旧登录函数(不是新函数)中设置的cookies中运行良好

为了以防万一这可能很重要,并且为了证明我在解决类似问题的答案中没有解决任何常见问题,或者在取消设置cookie的相对时间内没有解决任何常见问题,我显示了我的代码。首先,设置cookies(新cookies)的代码:

我的注销脚本:

<?php
  include 'login_functions.php'; 
  logout(); 
?>
我已经测试了标题-它们工作正常。响应标题(根据Chrome的扩展)包括以下内容:

Set-Cookie  pass=deleted;
expires=Thu, 01-Jan-1970 00:00:01 GMT;
path=/;
domain=e-history.cz;
httponly
Set-Cookie  login=deleted;
expires=Thu, 01-Jan-1970 00:00:01 GMT;
path=/;
domain=e-history.cz;
httponly
编辑——我把以前的“答案”作为问题的一部分,因为它只起作用一段时间;我不知道为什么现在不行。我在非httponly、httponly和混合cookie之间切换了几次;每次我在创建新cookie之前删除旧cookie,并注意不要使它们不匹配。不管怎样,httponly似乎没有什么不同

我发现说那句话让人不安 没有服务器交互,httponly cookie是不可能的。 从理论上讲,这不应该是一个问题,因为我使用php,它可以工作 服务器端。然而,这在实践中并不容易。但是有一个 解决方案,建议在:制作一个饼干 具有和另一个不具有httponly属性。我担心 密码cookie中的旧值将与登录名冲突 另一个用户,但我测试了它,效果很好,新用户的 密码只会覆盖旧用户的密码


这个问题不仅出现在httponly中,甚至没有出现在我链接的任何其他问题中,而是出现在域中——在“main”域(e-history.cz)上,“domain”cookie属性的前缀会自动加上一个点。在test子目录(e-history.cz/test)上,这没有发生。结果是,我可以删除主域生成的cookie,即使测试域使用的是httponly cookies,但我无法从测试子目录中删除cookies。我明确地将点添加到域中,现在一切正常。对主域和测试域使用相同的cookie现在似乎不是问题-如果是问题,我会完全删除点(通过设置null或“”来调用默认值,而不是设置域)

  function logout() { 
    include 'library.php';  //all functions and constants

    //var_dump( headers_sent() );  //I've tested the headers, not sent yet

    checkSession();  //starts session if not started
    unset($_SESSION['login']);  //I don't need to delete the rest of the session for logout

    if(isset($_COOKIE['login']))  {
      setcookie ('login', '', 1,'/','e-history.cz', false, true);
    }   
    if(isset($_COOKIE['pass']))  {
      setcookie ('pass', '', 1,'/','e-history.cz', false, true);
    }

    header('Location:index.php'); 
  }
Set-Cookie  pass=deleted;
expires=Thu, 01-Jan-1970 00:00:01 GMT;
path=/;
domain=e-history.cz;
httponly
Set-Cookie  login=deleted;
expires=Thu, 01-Jan-1970 00:00:01 GMT;
path=/;
domain=e-history.cz;
httponly