PHP-cookie变量和会话变量的有趣行为
我在下面写了一个小PHP脚本来演示我的问题。像这样运行下面的代码:,然后运行,然后等等。你会看到回显到屏幕上的数字总是在url数字后面1位?!也许是因为我不能马上读同一块饼干 //If query string has $test, store in session, and cookie for later. if($_GET[test]){ $_SESSION['test'] = $_GET[test]; setcookie("test", $_GET[test], time()+60*60*24*30*12*10); //10 years } //If user comes back later, then get $test from cookie if (isset($_COOKIE["test"])){ $_SESSION['test'] = $_COOKIE["test"]; } echo "session test: " . $_SESSION['test']; //如果查询字符串有$test,则存储在会话中,并在以后使用cookie。 如果($\u获取[测试]){ $\会话['test']=$\获取[test]; setcookie(“test”,$_GET[test],time()+60*60*24*30*12*10);//10年 } //若用户稍后返回,则从cookie获取$test 如果(isset($\u COOKIE[“测试”])){ $_会话['test']=$_COOKIE[“test”]; } echo“会话测试:”$_会话[‘测试’]; 后来,我用下面的代码解决了这个问题,但是解决它还不够好,我想知道为什么会发生这种情况 这就解决了它: if($_GET[cid]){ setcookie("campaignid", $_GET[cid], time()+60*60*24*30*12*10); //10 years $_SESSION['campaignid'] = $_GET[cid]; }elseif (isset($_COOKIE["campaignid"])){ $_SESSION['campaignid'] = $_COOKIE["campaignid"]; } 如果($\u获取[cid]){ setcookie(“活动ID”,$\u GET[cid],time()+60*60*24*30*12*10);//10年 $\会话['campaignid']=$\获取[cid]; }elseif(isset($_COOKIE[“活动ID”])){ $_会话['campaignid']=$_COOKIE[“campaignid”]; } 也许是因为我不能马上读同一块饼干 //If query string has $test, store in session, and cookie for later. if($_GET[test]){ $_SESSION['test'] = $_GET[test]; setcookie("test", $_GET[test], time()+60*60*24*30*12*10); //10 years } //If user comes back later, then get $test from cookie if (isset($_COOKIE["test"])){ $_SESSION['test'] = $_COOKIE["test"]; } echo "session test: " . $_SESSION['test']; 没错。您发送的cookie只有在下一个请求中才在$\u cookie数组中可用,因为$\u cookie超全局数组中填充了客户端请求中的数据。一开始要求它什么都不是PHP-cookie变量和会话变量的有趣行为,php,cookies,Php,Cookies,我在下面写了一个小PHP脚本来演示我的问题。像这样运行下面的代码:,然后运行,然后等等。你会看到回显到屏幕上的数字总是在url数字后面1位?!也许是因为我不能马上读同一块饼干 //If query string has $test, store in session, and cookie for later. if($_GET[test]){ $_SESSION['test'] = $_GET[test]; setcookie("test", $_GET[test], time()+
session\u start()
),您使用的是未定义的常量test
,但是PHP“智能”足以理解您指的是字符串“test”
在第一个代码片段中,您正在调用
setcookie()
。这将向浏览器发送HTTP头。调用setcookie()时,PHP不会更新$\u COOKIES
变量。浏览器返回cookie时,$\u COOKIES变量将在下次脚本调用时更新。或者换句话说,setcookie
不会为您将其添加到$\u cookie
。而且,像这样混合$\u COOKIE
和$\u SESSION
只是。。好吧,奇怪。我喜欢《智慧》里的名言。完全同意。