PHP会话变量丢失,会话ID在每个请求上都在变化

时间:2017-08-15 11:59:45

标签: php session variables

我找到了很多关于这个问题的答案,但没有解决我的问题 - 所以我想告诉你我的代码,希望有人能找到错误..

我有一个标准的HTML公式,它给一些带有POST的数据到下一个.php文件,我得到它并将其保存到会话变量中。我使用会话变量有两个原因:

  1. 如果有人重新加载页面,它应该显示与以前相同的信息。
  2. 我需要即将发布的php文件中的变量。
  3. 以下是代码:

      session_start();
    
      // Handle Variables on post and reloaded-page
      if(isset($_POST["locId"]) && isset($_POST["dateId"]) )
      {
    
          $locId  = htmlspecialchars($_POST["locId"]);
          $dateId = htmlspecialchars($_POST["dateId"]);
    
          $_SESSION["locId"]    =   $locId;
          $_SESSION["dateId"]   =   $dateId;
    
          echo "Session variables are set: locId = " . $_SESSION["locId"] . " dateId = " . $_SESSION["dateId"];
    
      } elseif(isset($_SESSION["locId"]) && isset($_SESSION["dateId"])) {
    
          echo "get it from session";
          $locId    =   $_SESSION["locId"];
          $dateId   =   $_SESSIOn["dateId"];
    
       } else {
    
          $load_error = 1;
          $status = "alert alert-danger";
          $message = "shit, no variables here";
    
      }
    

    frist调用正常 - 会话变量已设置且echo提供正确的值。重新加载页面后,我得到回声"从会话中获取#34;但我的变量没有价值。

    我还在第一次调用时检查了我的session_id()并重新加载..它们不一样。

    我测试了一个简单的test.php文件,其中我用变量启动会话并在下一个文件中请求变量。它工作正常: - /

    上面的代码只是一个问题。我认为我的网络服务器正在处理。但是有什么理由会导致会话ID失败并失去会话变量值?

3 个答案:

答案 0 :(得分:2)

<强>该死!写得正确就是一切......

我发现了我的错误。

查看我的问题中的代码。第二个session-variable是$ _SESSIOn [“dateId”] .. n是小写的!如果我正确地写它并在大写中完成它它正在工作。

此外,session_id不再是chaging,我可以根据需要输出session_id()..但$ _SESSIOn中的一个错误会改变一切。每次通话都会有新的session_id,......很奇怪。

再次学到了一些东西:-)感谢大家的答案和时间!我希望将来可以帮助你

答案 1 :(得分:0)

嗯,你的错误很容易找到。事实上,您的代码完美无缺。但看看这部分:

  echo "get it from session";
  $locId    =   $_SESSION["locId"];
  $dateId   =   $_SESSIOn["dateId"];

好吧,你将会话值设置为两个变量,但事实上,你只是错过了将它们输出到任何地方。这就是为什么你得到#34;从会议中得到它&#34;但是什么都没有显示,你需要echo他们。

只需添加echo即可完美显示您的变量:)

echo "get it from session";
$locId    =   $_SESSION["locId"];
$dateId   =   $_SESSIOn["dateId"];

echo $locId;
echo $dateId;

答案 2 :(得分:-1)

试试这个:

SESSION_ID();

在session_start();