当前位置: 首页 > 知识库问答 >
问题:

PHP会话变量丢失,每个请求的会话id都在更改

郭浩穰
2023-03-14

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

我有一个标准的超文本标记语言的形式,给一些数据与POST到下一个. php文件,我得到它,并将其保存到会话变量。我使用会话变量有两个原因:

  1. 如果有人重新加载页面,它应该显示与以前相同的信息
  2. 我需要在即将到来的php文件中的变量

代码如下:

  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";

  }

第一个调用工作精细会话变量被设置,回声给出正确的值。重新加载页面后,我得到了回声“从会话中获取”,但我的变量没有值。

我还检查了第一次调用时的会话_id(),并重新加载。。它们不一样。

我做了一个简单的测试。php文件,其中我使用一个变量启动会话,并在下一个文件中请求该变量。它工作得很好:-/

这只是我上面代码的一个问题。我认为我的Web服务器处理得很好。但更改会话id和丢失会话变量值的原因是什么?

共有3个答案

曾永新
2023-03-14

试试这个:

会话_id();

session_start();

施利
2023-03-14

嗯,你的错误很容易发现。事实上,您的代码工作得非常好。但看看这一部分:

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

嗯,您将会话值分配给两个变量,但实际上,您只是错过了在任何地方输出它们。这就是为什么你从会话中获取它,但却什么也不显示,你需要回声它们。

只需添加一个echo,它将完美地显示您的vars:)

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

echo $locId;
echo $dateId;
谈灵均
2023-03-14

该死写正确就是一切。。。

我发现了我的错误。

请看我问题中的代码。第二个会话变量是$\u session[“dateId”]。。n是小写的!如果我写得正确,并且用大写字母填写,它就可以工作了。

此外,session_id不再摇晃,我可以输出session_id(),只要是想要的...每通电话都session_id,...奇怪。

再次学到了一些东西:-)感谢每个人的答案和你的时间!我希望我以后能帮到你

 类似资料:
  • 问题内容: 我有登录功能 此函数用于将变量保存到会话中, 但是当新请求检查用户是否登录时 然后返回总是“注销”,因为会话已更改。我使用Redis来存储会话,我认为这是Redis的错误,因为当我停止使用Redis时,可以,请帮帮我! 问题答案: 最好的处理方式是始终让Express处理它(如果可以的话)。 https://flaviocopes.com/express-sessions/(更新了会话

  • 我一直有一个问题,当请求来自域名而不是localhost时,会话变量不可用。例如,如果我设置一个用户变量: 当客户端发出另一个请求并且我尝试访问用户会话变量时,它返回null。 我注意到,在每个请求中,都会设置一个新的JSESSIONID cookie,并且ID值会更改。这是否意味着每次客户端访问服务器时都会创建一个新会话?如何在客户端之间保持相同的会话,以便我可以在Http会话中存储对象并访问它

  • 对于我的JMeter测试,我希望测试中的所有线程都使用一个共享会话id。在开始测试作业之前,会话id是已知的。如何为JMeter测试指定特定的JSessionId? 我尝试过在 HTTP Cookie 管理器(在用户定义的 Cookie 下)、HTTP 请求默认值(在请求发送参数下)中附加一个 JSessionId 参数,并且我尝试从录制控制器下的“预处理器”选项卡添加“HTTP URL 重写修饰

  • 问题内容: 如何解决在PHP中重定向后丢失会话的问题? 最近,我遇到了一个非常常见的问题,即在重定向后丢失会话。在搜索该网站后,我仍然找不到任何解决方案(尽管这是最接近的解决方案)。 更新资料 我找到了答案,我想将它发布在这里,以帮助遇到同样问题的任何人。 问题答案: 首先,执行以下常规检查: 确保在任何会话被调用之前被调用。因此,一个安全的选择就是将其放在页面的开头,紧接着在开始声明之后,再放在

  • 问题内容: 我正在维护Java Web应用程序。 通过登录代码,它可以通过HttpServletRequest的getSession()方法从HttpServletRequest中获取一个HttpSession。(它在会话中使用一些值进行认证) 但是,我担心会话固定攻击,因此在使用初始会话后,我想开始一个新会话或更改会话ID。这可能吗? 问题答案: Servlet 3.0 API不允许您更改现有会

  • 我们正在尝试使用Drool作为我们的规则引擎服务。我们到目前为止所做的如下 部署的工作台7.2.final 已部署的KIE服务器7.2.0。final 配置了一些数据对象、规则,将更改部署到KIE服务器,我们可以使用rest API执行规则 无状态会话满足了我们的大部分需求(给出一组数据,执行规则并返回数据,仅此而已)。但是使用无状态时,我们必须牺牲Drools有状态会话提供的许多重要特性。 我们