【问题标题】:PHP session seen as local variablePHP会话被视为局部变量
【发布时间】:2019-12-05 22:36:20
【问题描述】:

我遇到了 PHP 会话问题。当我开始会话并尝试向其中添加变量时,我只能进入我声明它的同一个 PHP 脚本,就像它是普通变量一样。浏览器调试器似乎也没有在会话中看到任何变量。

<?php

echo session_start(); //This returns 1 so session is created
$_SESSION["A"] = "B"; 
echo $_SESSION["A"]; // And this prints "B" as predicted 

?>

But there is nothing in session!

【问题讨论】:

  • 请将会话id打印到浏览器,每次刷新页面时查看是否继续变化。如果它继续更改,则可能没有创建会话文件。检查您的会话文件夹是否正在创建文件。

标签: php session session-storage


【解决方案1】:

您将服务器端 PHP 会话与客户端 JavaScript sessionStorage 混淆了。两者是完全不同的两件事。

https://www.php.net/manual/en/intro.session.php

https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage

浏览器调试器似乎也没有在会话中看到任何变量。

PHP 会话数据保存在服务器上,浏览器永远无法“看到”它,除非你明确地将它输出到某个地方(就像你对 echo $_SESSION["A"]; 所做的那样,但即便如此它当然也赢了'不在 sessionStorage 调试面板中显示。)


我只能进入我声明它的同一个 PHP 脚本,就像它是普通变量一样。

那么您很可能忽略了在其他脚本文件中再次选择您的会话。您需要在所有的开头调用session_start

【讨论】:

  • 好的,这就解释了为什么我在浏览器调试器中看不到会话属性,但我不应该被允许在不同的 .php 文件中使用这个 $_SESSION 变量吗?因为这是主要问题。我有一个登录表单,我想在会话中保存登录的用户名以在不同的文件中使用它,但其他脚本看不到它。
  • 您是否在所有这些不同的脚本中调用session_start
  • 是的,看起来就是这样:在 login.php 中:&lt;?php session_start(); #validation etc. $_SESSION["loggedUser"] = $firstName; header('Location: wall.php'); ?&gt; 在 wall.php 中:session_start(); echo $_SESSION["loggedUser"];
  • 您是否检查过会话 id 发生了什么,正如 Sid 建议您对他们上面的评论所做的那样?
  • 两个视图都一样,刷新页面时也一样。
猜你喜欢
  • 2011-04-16
  • 1970-01-01
  • 2011-07-31
  • 1970-01-01
  • 1970-01-01
  • 2013-04-27
  • 1970-01-01
  • 2014-05-26
  • 1970-01-01
相关资源
最近更新 更多