PHP:覆盖会话变量

时间:2010-04-04 14:13:24

标签: php session memory-management variables

有关PHP内存处理的问题来自尚未熟悉PHP的人:

如果我设置一个特定名称的PHP会话变量,然后在其他地方设置一个完全相同名称的会话变量(在同一个会话期间),原始变量是否被覆盖,或者垃圾是否在会话中累积?

换句话说,我应该在创建一个同名的新变量之前销毁之前的会话变量吗?

谢谢。

2 个答案:

答案 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