我使用cookies来实现“记住我”选项,以便在我的网站上登录。设置cookie工作正常。取消设置曾经工作过。然后我用httponly cookies创建了一个新版本的网站; logout在localhost上工作,但它在服务器上不起作用。我在目录“test”中运行新代码;我仍然可以使用旧代码,它可以很好地运行旧登录功能中设置的cookie(而不是新功能)。
以防万一可能很重要,并证明我没有解决related questions uncorrect parameters,testing on the same page,headers already sent或HTTP Spy的答案中的任何问题。在取消设置cookie的相对时间,我显示我的代码。首先,代码设置cookie(新的):
...
setcookie ('login', $login, time()+60*60*24*30,'/','e-history.cz', false, true);
setcookie ('pass', $pass, time()+60*60*24*30,'/','e-history.cz', false, true);
...
我的退出脚本:
<?php
include 'login_functions.php';
logout();
?>
退出功能:
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');
}
我测试了标题 - 它们运行正常。响应标头(根据Chrome的a similar question扩展名)包括以下内容:
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似乎没有什么区别。
我发现its answer说取消了 没有服务器交互,就无法使用httponly cookie。 从理论上讲,它应该不是问题,因为我使用的是php,它有效 服务器端。但是,在实践中并不容易。但是有一个 解决方案,在{{3}}中建议:制作其中一个Cookie 与另一个没有httponly属性。我害怕有 密码cookie中的旧值将与登录冲突 另一个用户,但我测试了它,它工作正常,新用户的 密码只会覆盖旧用户的密码。
答案 0 :(得分:0)
问题不是在httponly中,甚至在我链接的任何其他问题中都没有,但在域中 - 在&#34; main&#34;域名(e-history.cz)&#34;域名&#34; cookie属性自动以点为前缀。在test子目录(e-history.cz/test)上,这并没有发生。结果是我可以删除主域生成的cookie,即使测试域使用httponly cookie,但我无法从test subdir中删除cookie。我明确地将点添加到域中,现在一切正常。对主域和测试域使用相同的cookie现在似乎不是问题 - 如果它是一个问题,我会完全删除点(通过设置null或&#39;&#39;来调用默认值,而不是集合域)。