【问题标题】:PHP - funny behaviour of cookie variables and session variablesPHP - cookie 变量和会话变量的有趣行为
【发布时间】:2011-05-09 17:04:16
【问题描述】:

我在下面写了一个小 PHP 脚本来演示我的问题。像这样运行下面的代码:http://localhost/test.php?test=10,然后运行http://localhost/test.php?test=11,然后运行http://localhost/test.php?test=12,等等。你会看到在你的屏幕上回显的数字总是在url后面1位数字?!也许是因为我不能一个 cookie 并立即读取相同的 cookie?

//如果查询字符串有$test,存储在session中,cookie供以后使用。 如果($_GET[测试]){ $_SESSION['test'] = $_GET[test]; setcookie("test", $_GET[test], time()+60*60*24*30*12*10); //10年 } //如果用户稍后回来,则从cookie中获取$test if (isset($_COOKIE["test"])){ $_SESSION['test'] = $_COOKIE["test"]; } 回声“会话测试:”。 $_SESSION['test'];

后来我用下面的代码解决了这个问题,但是解决的还不够好,我想知道为什么会这样!

这解决了它:

如果($_GET[cid]){ setcookie("campaignid", $_GET[cid], time()+60*60*24*30*12*10); //10年 $_SESSION['campaignid'] = $_GET[cid]; }elseif (isset($_COOKIE["campaignid"])){ $_SESSION['campaignid'] = $_COOKIE["campaignid"]; }

【问题讨论】:

    标签: php cookies


    【解决方案1】:

    也许是因为我不能一个 cookie 并立即读取相同的 cookie?

    没错。您发送的 cookie 仅在下一个请求中在 $_COOKIE 数组中可用,因为 $_COOKIE 超全局数组中填充了客户端请求中的数据。乍一看,它什么都不是。

    【讨论】:

    • 或者换句话说,setcookie 不会为您将其添加到$_COOKIE。此外,像这样混合$_COOKIE$_SESSION 只是......好吧,很奇怪。
    【解决方案2】:
    1. 从技术上讲,您并没有启动会话 (session_start()),而是使用了未定义的常量 test,但是 PHP 足够“智能”,可以识别出您的意思是字符串 "test"
    2. 究竟是什么问题?

      也许是因为我不能一个 cookie 并立即读取相同的 cookie?

      是的,这是真的。你刚刚证明了这一点。

    【讨论】:

    • 喜欢“智能”上的名言。完全同意。
    【解决方案3】:

    在您的第一个 sn-p 中,您调用的是 setcookie()。这会将 HTTP 标头发送到浏览器。当您调用 setcookie() 时,PHP 不会更新 $_COOKIES 变量。当浏览器返回 cookie 时,$_COOKIES 变量会在下一次脚本调用时更新。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-29
      • 2011-09-23
      • 2012-07-23
      • 2012-04-30
      • 2014-03-24
      • 2015-01-23
      • 2021-09-02
      • 1970-01-01
      相关资源
      最近更新 更多