会话值可以覆盖局部变量

时间:2010-12-08 12:01:57

标签: php

我正在LAMP服务器上开发一个Php项目。现在我面临会话变量和局部变量的问题。在我的系统中,first.php在session中设置值,然后在second.php中,我将这些会话变量设置为我的局部变量。然后采取行动并清除会话值。但我也松了我的局部变量中的值。我怎么能解决这个问题? 编码流程的结构如下:

在first.php中

$_SESSION['var'] = "test";

在second.php中

$var = $_SESSION['var'] ;
$_SESSION['var'] = "";
echo $var;           // at this time ,i cant also see my local variable values

2 个答案:

答案 0 :(得分:1)

如果这就是你的第一个和第一个第二个脚本,然后你在一个或所有脚本的开头肯定错过了session_start()

仔细查看您的php错误日志,您可能会更好地解释缺少的内容和错误。如果在使用会话的每个脚本的开头都有session_start(),那么您的代码应该运行良好。

如果您没有显式调用session_start(),那么变量$_SESSION只不过是用户定义的变量,所以在第一个脚本中,您为用户定义的变量赋值,并在您只需调用不存在的用户定义变量的第二个脚本。请注意,php区分大小写,$_SESSION$_Session不同。

除非通过引用分配变量,否则无法远程覆盖变量,请查看此示例:

$b = 1;
$a =& $b;
echo $a; // will output 1
$b = 2;
echo $a; // will output 2

Here很好地解释了引用如何在php中工作。

答案 1 :(得分:0)

您已启用register_globals。这确实非常糟糕,因为它允许最终用户在脚本中注入变量(每个示例使用cookie)。

它已被弃用。关闭它,快速(在php.ini中,或者如果你不能,在带有php_flag指令的.htaccess中)。如果您的脚本依赖它,请更改您的脚本。