【问题标题】:Problem with PHP session in XamppXampp 中的 PHP 会话问题
【发布时间】:2010-07-13 08:54:30
【问题描述】:

最简单的,如果 file_1.php 包含

<?php

  session_start(); 

  $_SESSION["test_message"] = "Hello, world";

  header("Location: http://localhost/file_2.php");
?>

并且file_2.php包含

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
</head>
<body>

<?php

  if (!(isset($_SESSION["test_message"])))
    echo "Test message is not set";
  else
    echo $_SESSION["test_message"];

var_dump($_SESSION);

  session_destroy();
?>

</body>
</html>

结果是 Test message is not set 并且 var_dump($_SESSION) 返回 null - locally, with Xampp。但是,如果我将这些相同的文件上传到付费托管网站,它就可以工作并且我看到了

Hello, world
array
  'test_message' => string 'Hello, world' (length=12)

当我在 Xampp 下查看 PHPinfo 时,它显示 Session Support enabled。我做错了什么?

【问题讨论】:

    标签: php session xampp


    【解决方案1】:

    你忘记了 file_2.php 顶部的 session_start

    应该是这样的:

    <?php
    session_start(); 
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
    <html>
    <head>
    </head>
    <body>
    
    <?php
    
      if (!(isset($_SESSION["test_message"])))
        echo "Test message is not set";
      else
        echo $_SESSION["test_message"];
    
    var_dump($_SESSION);
    
      session_destroy();
    ?>
    
    </body>
    </html>
    

    session_start() 应该位于您需要访问会话功能的每个文件的顶部。

    编辑:

    在重定向到另一个页面之前,你真的应该使用 session_write_close。

    第一个文件:

    <?php
    session_start(); 
    
    $_SESSION["test_message"] = "Hello, world";
    
    session_write_close(); 
    header("Location: http://localhost/file_2.php");
    ?>
    

    【讨论】:

    • session_start();在 file_2 的顶部?为什么不是 file_1 的开头?这就是会话开始的地方,它设置了 fiel_2 将检索的会话变量。
    • 它必须在两个脚本中。 session_start() not 初始化一个 new 会话,它启动 php 的会话处理机制,你必须在你想要使用的每个 php 实例中(至少)执行一次会话数据。新请求,新 php 实例,新 session_start()。
    • 好的,你们两个都这么说 - 我已经 +1 你们两个了。但是还是不行
    • +1 谢谢。我已经更新了问题以反映这一点。我只是将文件上传到我自己的网络服务器,而不是在我的笔记本电脑上使用 Xampp,看看它是否会有所不同
    • 啊!当我将它上传到我的托管网站时它可以工作,但是当我在 Xamp 中本地运行它时它就不能工作。
    【解决方案2】:

    可以在 Xampp 7.1.6 中修复会话问题 在 php.ini 中进行以下更改 第 1403 行

    session.auto_start = 1
    

    【讨论】:

      猜你喜欢
      • 2012-04-15
      • 2010-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多