有关PHP内存处理的问题来自尚未熟悉PHP的人:
如果我设置一个特定名称的PHP会话变量,然后在其他地方设置一个完全相同名称的会话变量(在同一个会话期间),原始变量是否被覆盖,或者垃圾是否在会话中累积?
换句话说,我应该在创建一个同名的新变量之前销毁之前的会话变量吗?
谢谢。
答案 0 :(得分:4)
$ _ SESSION就像任何其他数组一样,所以如果每次都使用相同的键,则会覆盖该值。
答案 1 :(得分:1)
汤姆,
这取决于你如何使用会话变量,但它通常意味着“擦除”该变量(准确地用新值替换旧值)。
会话变量可以存储字符串,数字甚至是对象。
<?php
# file1.php
session_start();
$_SESSION['favcolor'] = 'green';
$_SESSION['favfood'] = array('sushi', 'sashimi');
?>
此后,$_SESSION['favcolor']
变量和$_SESSION['favfood']
变量存储在服务器端(默认情况下为文件)。如果同一个用户访问另一个页面,该页面可以从同一个存储器中取出数据,或者写入同一存储器,从而让用户产生服务器“记住”他/她的错觉。
<?php
# file2.php
session_start();
echo $_SESSION['favcolor'], '<br />';
foreach ($_SESSION['favfood'] as $value) {
echo $value, '<br />';
}
?>
当然,您可以按照自己的方式修改$_SESSION
变量:您可以unset()
任何变量,通过$_SESSION['favfood'][] = 'hamburger';
在示例中附加数组,依此类推。它将全部存储到会话文件(默认情况下为文件,但可以是数据库)。但请注意$_SESSION
变量只有在调用session_start()
后才会神奇地。这通常意味着,如果您使用会话,则必须在网站每个页面的开头调用session_start()
。否则,$_SESSION
只是一个普通变量,没有任何魔法发生: - )。
有关详细信息,请参阅PHP reference here。