1

在 PHP 中是否有可能在以前存储字符串的地方有一个数组?

echo "valuebefore: ".$_SESSION['REQUEST_TOKEN'][TL_MODE];
$_SESSION['REQUEST_TOKEN'][TL_MODE] = "somestring";

echo "typebefore: ".gettype($_SESSION['REQUEST_TOKEN'][TL_MODE]);
$_SESSION['REQUEST_TOKEN'][TL_MODE] = array();

echo "typeafter: ".gettype($_SESSION['REQUEST_TOKEN'][TL_MODE]);
if (!is_array($_SESSION['REQUEST_TOKEN'][TL_MODE]))
{
  echo "is not an array";
}
echo "valueafter: ".$_SESSION['REQUEST_TOKEN'][TL_MODE];

输出是:

valuebefore: A
typebefore: string 
typeafter: string   << the type didnt change to array!
is not an array
valueafter: A       << the value was not updated!

为什么它不能只保存新数组?为什么价值也没有改变?

编辑:

这是涉及的其他变量的 vardump:

echo var_dump(TL_MODE)." <br/>";
echo var_dump($_SESSION['REQUEST_TOKEN'])." <br/>";
echo var_dump($_SESSION['REQUEST_TOKEN'][TL_MODE])." <br/>";

输出:

string(2) "FE"
string(32) "A96665c9f1e41d1745bf3a3d75cff33a"
string(1) "A"
4

4 回答 4

0

TL_MODE 的值是多少?如果您没有将其定义为常量,那么您只是添加数组项。这可以解释您所看到的行为。最后输出数组,看看你有什么。

var_dump($_SESSION['REQUEST_TOKEN']);
于 2012-10-26T03:11:44.923 回答
0

附加以下代码的输出:

  • 之前的值:A
  • typebefore: 字符串
  • 打字后:数组
  • 值后:数组

您应该回显 TL_MODE 和 $_SESSION 内容的值以进行调试。

<?php

    session_start();
    DEFINE('TL_MODE', 'tl_mode_constant');
    $_SESSION['REQUEST_TOKEN'][TL_MODE] = 'A';

    echo "valuebefore: ".$_SESSION['REQUEST_TOKEN'][TL_MODE] . '<br />';
    $_SESSION['REQUEST_TOKEN'][TL_MODE] = "somestring";

    echo "typebefore: ".gettype($_SESSION['REQUEST_TOKEN'][TL_MODE]) . '<br />';
    $_SESSION['REQUEST_TOKEN'][TL_MODE] = array();

    echo "typeafter: ".gettype($_SESSION['REQUEST_TOKEN'][TL_MODE]);
    if (!is_array($_SESSION['REQUEST_TOKEN'][TL_MODE])){
        echo "is not an array" . '<br />';
    }
    echo "valueafter: ".$_SESSION['REQUEST_TOKEN'][TL_MODE] . '<br />';

?>
于 2012-10-26T03:18:48.857 回答
0

这个较小的例子对我有用:

$ php -r '$a="foo"; $a=array("bar"); var_dump($a);'
array(1) {
  [0]=>
  string(3) "bar"
}

您的 var_dumps 应该显示 (1)$_SESSION['REQUEST_TOKEN']是一个数组,并且 (2) 您的常量TL_MODE是一个非空值。如果它为 null,则$_SESSION['REQUEST_TOKEN'][TL_MODE]与 相同$_SESSION['REQUEST_TOKEN'][],并且仅在您认为要重新分配时才添加数组元素。但是如果$_SESSION['REQUEST_TOKEN']是一个字符串,那么如果它是一个数组,就不能添加下标。

于 2012-10-26T11:40:40.760 回答
0

@Brent Baisley 说得对,$_SESSION['REQUEST_TOKEN'] 不是数组而是字符串,但基本问题原来是与 cookie 相关的问题,它破坏了 $_SESSION 数据。

一旦我清除了网络浏览器中的 cookie 和缓存,一切正常。

于 2012-10-30T20:06:38.907 回答