请考虑以下代码段 -
if(some_condition){
echo $candidate_id= $row_id['id'];
setcookie("candidate_id", $candidate_id, time()+3600);
echo "<script>console.log(document.cookie)</script>";
}
if(isset($_COOKIE['candidate_id'])){
echo "from cookie";
echo $candidate_id= $_COOKIE['candidate_id'];exit;
}
else{
echo "not from cookie";
echo $candidate_id= $row_id['id'];exit;
}
第一次提供正确的输出 -
288not from cookie288
并在控制台中
candidate_id=288; PHPSESSID=kfpjvl9j4rluh1stjdjcijgi75
但如果我再次运行代码,我会得到以下输出
289from cookie288
并在控制台中
candidate_id=289; PHPSESSID=kfpjvl9j4rluh1stjdjcijgi75
这意味着,在第二次运行时,正在修改cookie值,但$_COOKIE['candidate_id']
未获取更新的值。但为什么呢?
答案 0 :(得分:1)
$_COOKIE
根据用户请求中的cookie进行初始化。调用setcookie()
时未更新。
你可以通过这样做来伪造它:
function mySetCookie($name, $value, $time) {
setcookie($name, $value, $time);
$_COOKIE[$name] = $value;
}
然后调用mySetCookie(),无论你在哪里调用setcookie()。这可能是错误的 - 我没有测试过它,并且相当肯定它会在某些配置中遇到问题。