【发布时间】:2010-04-04 14:13:24
【问题描述】:
一个对 PHP 还不是很熟悉的人提出的关于 PHP 内存处理的问题:
如果我设置了一个特定名称的 PHP 会话变量,然后在其他地方(在同一会话期间)设置了一个完全相同名称的会话变量,原始变量会被覆盖,还是会在会话中累积垃圾?
换句话说,我应该在创建一个新的同名会话变量之前销毁之前的会话变量吗?
谢谢。
【问题讨论】:
标签: php session memory-management variables
一个对 PHP 还不是很熟悉的人提出的关于 PHP 内存处理的问题:
如果我设置了一个特定名称的 PHP 会话变量,然后在其他地方(在同一会话期间)设置了一个完全相同名称的会话变量,原始变量会被覆盖,还是会在会话中累积垃圾?
换句话说,我应该在创建一个新的同名会话变量之前销毁之前的会话变量吗?
谢谢。
【问题讨论】:
标签: php session memory-management variables
$_SESSION 的工作方式与任何其他数组一样,因此如果您每次都使用相同的键,则该值将被覆盖。
【讨论】:
汤姆,
这取决于您如何使用会话变量,但通常意味着“擦除”该变量(准确地说,用新值替换旧值)。
会话变量可以存储字符串、数字甚至对象。
<?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 了解更多信息。
【讨论】: