我在下面写了一个小PHP脚本来演示我的问题。像下面这样运行以下代码:http://localhost/test.php?test=10,然后运行http://localhost/test.php?test=11,然后运行http://localhost/test.php?test=12等。您将看到回显到屏幕的数字始终位于网址号后面1位数?!也许是因为我不能吃饼干并立即阅读相同的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"]; }
答案 0 :(得分:4)
也许是因为我不能吃饼干并立即阅读相同的cookie?
完全。您发送的cookie仅在下一个请求中以$ _COOKIE数组提供,因为$ _COOKIE超全局数组充满了客户端请求中的数据。并且首先要求它什么都不是。
答案 1 :(得分:0)
session_start()
)并且你正在使用未定义的常量test
,但PHP是“智能的”足以弄清楚你的意思是字符串"test"
究竟是什么问题?
也许是因为我不能吃饼干并立即阅读相同的cookie?
是的,那是真的。你刚刚证明了这一点。
答案 2 :(得分:0)
在您的第一个代码段中,您正在呼叫setcookie()
。这会向浏览器发送HTTP标头。调用setcookie()时,PHP不会更新$_COOKIES
变量。当浏览器返回cookie时,$ _COOKIES变量会在下一个脚本调用时更新。