本文已参与「新人创作礼」活动,一起开启掘金创作之路。
一、先上答案
1、cookie是设置在客户端的,setcookie函数自己并不能设置cookie,它只能通过头信息的方式告诉浏览器说:我想要设置一个 cookie,键为a,值为value,你在你那里帮我设置一下
2、编程语言的执行是自上而下的,当次执行的时候cookie文件中并没有,请求之初也没有携带需要的存的信息,所以拿不到
3、当第二次请求的时候,由于服务器让浏览器存入了cookie文件,在浏览器的请求头信息中已经有了,具体可以参照下图
二、再亮代码
<?php
function test() {
setcookie('user_cookie', 123, time()+3600, '/');
var_dump($_COOKIE['user_cookie']);exit;
}
三、图文说明:
3.1 第一次请求为空的情景
3.2 第二次请求的情景
四、拓展知识 :
4.1 Cookie在PHP中是如何携带的
<?php
header('Content-Type:text/html;charset=utf-8');
echo "<pre>";
function curl($cookie,$user_agent,$destURL, $paramStr='',$flag='get',$ip='10.57.22.166',$fromurl='http://www.juejin.cn'){
$curl = curl_init();
if($flag=='post'){//post传递
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $paramStr);
}
curl_setopt($curl, CURLOPT_URL, $destURL);//地址
curl_setopt($curl, CURLOPT_HTTPHEADER, array('X-FORWARDED-FOR:'.$ip, 'CLIENT-IP:'.$ip)); //构造IP
curl_setopt($curl, CURLOPT_REFERER, $fromurl);
curl_setopt($curl, CURLOPT_TIMEOUT, 3);#3s超时时间
curl_setopt ($curl, CURLOPT_USERAGENT, $user_agent);
//curl_setopt ($curl, CURLOPT_COOKIEJAR, $cookie);
curl_setopt ($curl, CURLOPT_COOKIEFILE, $cookie);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$str = curl_exec($curl);
curl_close($curl);
return $str;
}
$postdata = 'a=66666666';
$user_agent = "Mozilla/5.".rand(0,100)." (MacOS NT 13.1; Gecko/20220513 Firefox/33.0";
$cookie = 'd:\cookie.txt';
$getip='66.66.'.rand(0,16).'.'.rand(0,158) ;
//file_put_contents('d:\cookie.txt', '');
$cookie_file = dirname(__FILE__).'/cookie.txt';
ob_start();
$html = curl($cookie_file,$user_agent,'http://127.0.0.1/b.php',$postdata,'post',$getip,'');
ob_end_clean();
echo $html;
4.2 PHP是怎样识别不同的SESSION的呢?
### php.ini
session_start();
session.auto_start = On ;
session.auto_start = off ;
SESSION是一种机制,可以在服务器端跨文件暂时保存数据或传递数据,常用于购物车等方面。SESSION只在用户关闭浏览器之前有效。每一次SESSION会话都有一个SESSION ID,用来识别不同的会话,保存在浏览器Cookie之中,也就是这个名为PHPSESSID的Cookie(当然,这个名称是可以更改的)。