我在下面写了一个小小的PHP脚本来演示我的问题。运行下面的代码,如下所示:http://localhost/test.php?test=10,然后运行http://localhost/test.php?test=11,然后运行http://localhost/test.php?test=12等等。您将看到显示在屏幕上的数字始终位于url编号后面一位数字?!也许是因为我不能cookie,并立即读取相同的cookie?PHP - Cookie变量和会话变量的有趣行为
//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'];
后来,我用下面的代码解决了这个问题,但是解决它还不够好,我想知道为什么发生这种情况!
这解决了这个问题:
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"]; }
换句话说,'setcookie'不会将它添加到'$ _COOKIE'中。另外,像这样混合'$ _COOKIE'和'$ _SESSION'就好了,很奇怪。 – Ashe 2010-11-14 01:49:51