【问题标题】:PHP: Over-writing session variablesPHP:覆盖会话变量
【发布时间】:2010-04-04 14:13:24
【问题描述】:

一个对 PHP 还不是很熟悉的人提出的关于 PHP 内存处理的问题:

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

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

谢谢。

【问题讨论】:

    标签: php session memory-management variables


    【解决方案1】:

    $_SESSION 的工作方式与任何其他数组一样,因此如果您每次都使用相同的键,则该值将被覆盖。

    【讨论】:

    • 我发现情况并非如此。
    • 我不确定为什么会这样,所以我真的不能说。似乎是某种变量范围问题,可能在函数或包含的 php 文件中。由于某些未知原因,我遇到了无法覆盖会话变量的问题。
    【解决方案2】:

    汤姆,

    这取决于您如何使用会话变量,但通常意味着“擦除”该变量(准确地说,用新值替换旧值)。

    会话变量可以存储字符串、数字甚至对象。

    
    <?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 了解更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-25
      • 2013-05-17
      • 1970-01-01
      • 2012-12-29
      • 2019-04-20
      • 2013-02-22
      • 2011-06-25
      • 1970-01-01
      相关资源
      最近更新 更多