Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-cookie变量和会话变量的有趣行为_Php_Cookies - Fatal编程技术网

PHP-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()+

我在下面写了一个小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超全局数组中填充了客户端请求中的数据。一开始要求它什么都不是

  • 从技术上讲,您没有启动会话(
    session\u start()
    ),您使用的是未定义的常量
    test
    ,但是PHP“智能”足以理解您指的是字符串
    “test”
  • 到底是什么问题

    也许是因为我不能马上读同一块饼干

    //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']; 是的,没错。你刚刚证明了这一点


  • 在第一个代码片段中,您正在调用
    setcookie()
    。这将向浏览器发送HTTP头。调用setcookie()时,PHP不会更新
    $\u COOKIES
    变量。浏览器返回cookie时,$\u COOKIES变量将在下次脚本调用时更新。

    或者换句话说,
    setcookie
    不会为您将其添加到
    $\u cookie
    。而且,像这样混合
    $\u COOKIE
    $\u SESSION
    只是。。好吧,奇怪。我喜欢《智慧》里的名言。完全同意。