gpt4 book ai didi

php - 当 httponly 为 true 时,Cookies 抵抗 setcookie() 删除

转载 作者:行者123 更新时间:2023-12-05 07:57:05 25 4
gpt4 key购买 nike

我使用 cookie 来实现“记住我”选项以在我的网站上登录。设置 cookie 工作正常。取消设置曾经有效。然后我制作了一个新版本的网站,带有httponly cookies;注销在本地主机上工作,但在服务器上不起作用。我在目录“test”中运行新代码;我仍然可以使用旧代码,旧代码对于旧登录功能(不是新登录功能)中设置的 cookie 运行良好。

以防万一它可能很重要,并证明我在 related questions 的答案中没有解决任何常见问题。喜欢uncorrect parameters , testing on the same page , headers already sent或取消设置 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');
}

我已经测试了 header - 它们工作正常。响应 header (根据 Chrome 的 HTTP Spy 扩展)包括以下内容:

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 似乎没有什么不同。

I have found a similar question saying that unsetting the httponly cookie is not possible without server interaction. Theoretically, it shouldn't be a problem, as I use php, which works server-side. However, it's not so easy in practice. But there's a solution, suggested in its answer: to make one of the cookies with and the other without httponly property. I was afraid that having the old value in the password cookie would collide with login as another user, but I tested it and it works fine, the new user's password just overwrites the old user's one.

最佳答案

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

关于php - 当 httponly 为 true 时,Cookies 抵抗 setcookie() 删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27982461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com