【问题标题】:PHP variable life cyclePHP变量生命周期
【发布时间】:2014-03-02 00:51:58
【问题描述】:

好的,我正在尝试传递一个变量,但我遇到了问题。 全部发生在一个 PHP 文件中,简化代码如下:

    <?php session_start(); ?>
    <html>
                ...some HTML code...
    <?php
          $var = 100      // variable that i need
          $_SESSION['passover'] = $var; 

     ?>                

     ...HTML code with 'submit' form 
      </html>

     <?php
      if(isset($_POST['submit'])){..do something...}
      $var_again = $_SESSION['passover']   //problem!
      print_r($_SESSION);  

      session_destroy();  
      ?>

在我按下提交之前,我得到如下输出: Array ( [passover] => dog.jpg ) 按提交后,我得到: Array ( )

我做错了什么? 在这种情况下,变量是一个文件名,但我尝试使用简单的数字,但它也不起作用。

【问题讨论】:

  • 从代码中移除 session_destroy
  • 有趣,它有帮助:) 你能解释一下吗? Session_destroy 在代码的最后。
  • @Cornelius 每当您调用session_destroy 时,您都会从PHP 的会话管理中删除该会话。它应该用于“注销”操作等。
  • 是的,但是对于我作为 PHP 初学者来说,有趣的是,它甚至在打印输出之前就破坏了会话变量。这是调用 session_destroy 命令之前的一行代码。

标签: php variables session


【解决方案1】:

您需要从代码中删除 session_destroy,遵循以下逻辑:

  1. 你开始会话(ok)
  2. 您将变量放入会话中(好的)
  3. 你从会话中打印变量(ok)
  4. 您从会话中删除了所有信息(不正常)
  5. 在下一个请求(提交后)你有空会话,因为 p4

【讨论】:

  • 不,不,那不是行。它是这样的: 1. 启动会话 2. 将变量放入会话 3. 提交表单 4. 打印会话变量 5. 销毁会话
  • @Cornelius 不,你总是破坏会话
  • 有趣。那么destroy_session在代码中的位置关系不大?那么这个会话什么时候结束,这个会话变量会持续多久?
  • @Cornelius 的位置很重要,但在您的代码中,每个请求都会调用 session_destroy
  • 是的,但是大声笑......在此之前,销毁会话的“每个请求”都是一个打印行。为什么它打印一个空数组,即使是第一次,在它到达 destroy_session 行之前......
【解决方案2】:

Session_destroy() 绝对是罪魁祸首。
另外,我想您不小心在示例代码中留下了几个分号,但是分号丢失了 两次..

$var = 100  **;**    // variable that i need
.
.
$var_again = $_SESSION['passover'] **;**  //problem!

另外,您实际上在这里使用了两个变量名:$var 和 $var_again。如果这两者都意味着是同一件事,那么这也可能是一个问题。

【讨论】:

  • 是的,这里缺少分号是错误的,因为我在编写这段代码时遇到了麻烦。我总是按 Tab,这在这里不起作用。
  • 我很想知道删除 session_destroy() 是否不能为您解决此问题。删除它应该没问题。先把它注释掉以测试。那你就肯定知道了。
  • 是的,它确实有帮助。这是我的第一个答案。
猜你喜欢
  • 1970-01-01
  • 2015-04-22
  • 1970-01-01
  • 2012-05-19
  • 2011-09-12
  • 2017-08-21
  • 2015-05-03
  • 2018-12-14
  • 1970-01-01
相关资源
最近更新 更多