我在下面写了一些PHP脚本来演示我的问题。 像这样运行下面的代码:http://localhost/test.php?test = 10,然后运行http://localhost/test.php?test = 11,然后运行http://localhost/test.php?test = 12,等等。您会看到回显到屏幕上的数字始终是网址数字后面的1位数字?! 也许是因为我无法打开cookie,并立即读取同一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"];
}
Maybe because I cant a cookie and immediately read the same cookie?
究竟。 您发送的Cookie仅在下一个请求中才在$ _COOKIE数组中可用,因为$ _COOKIE超全局数组中填充了客户端请求中的数据。 最初要求没有什么。
换句话说,setcookie不会为您添加到$_COOKIE中。 另外,像这样混合$_COOKIE和$_SESSION也是..很好,很奇怪。
在第一个代码段中,您正在调用setcookie()。 这会将HTTP标头发送到浏览器。 当您调用setcookie()时,PHP不会更新$_COOKIES变量。 当浏览器返回cookie时,$ _ COOKIES变量在下一次脚本调用时更新。
从技术上讲,您没有启动会话(session_start()),而是使用未定义的常量test,但是PHP具有足够的"智能性",足以弄清楚您是指字符串"test"。
到底是什么问题?
Maybe because I cant a cookie and immediately read the same cookie?
是的,这是真的。 您已经证明了这一点。
喜欢"智能"上的引号。 无法同意更多。