【问题标题】:Bug using PHP SESSION variable使用 PHP SESSION 变量的错误
【发布时间】:2015-09-01 20:56:09
【问题描述】:

我有我的应用程序,我在其中存储了一个$_SESSION['userId'] 变量,以了解用户是否已登录,以及它是什么用户。这是我在索引中的一段代码:

session_start();
if(!isset($_SESSION['userId']) || empty($_SESSION['userId']) )
{
  header("Location: login.php");
}

而登录中的代码则相反。

到目前为止一切正常,我有一个小错误。我把上面的代码修改成这样:

session_start();
if(!isset($_SESSION['userId']) || empty($_SESSION['userId']) )
{
  header("Location: login.php");
}else{
  echo "<script>console.log('user id is set');</script>";
}

如果我以这种方式运行它,控制台日志会正确显示。但是,如果我将 console.log 行更改为:echo "&lt;script&gt;console.log('user id=".$_SESSION['userId']."');&lt;/script&gt;";,则该站点永远不会加载,并且控制台中不会出现错误。

知道会发生什么吗?只是为了让您知道,我在 .php 文件中发现了这个错误,该文件使用 userId SESSION variable 将内容插入到 sql 数据库中,然后它突然停止工作。

【问题讨论】:

  • 从不加载?就像死亡的白页一样?打开 error_reporting 和 display_errors。
  • 尝试在标题后添加exit;
  • 要展开@MarcB 的评论,请将error_reporting(E_ALL); ini_set("display_errors", 1); 添加到您的脚本中以显示正在发生的任何错误。
  • 在浏览器中查看源代码。用户 ID 是否包含引号?
  • 我重新加载了所有内容,现在它可以工作了。我认为可能发生的事情是我的会话变量已过期,这导致了问题。有谁知道会话变量是否过期isset 应该返回true?有什么方法可以检查变量是否过期?

标签: php session session-variables


【解决方案1】:

错误报告和/或 display_error 可能设置为不显示任何内容(生产环境)。尝试设置它们以查看实际错误。

您应该使用addslashes() 或等效项来转义$_SESSION['userId'] 的引号。

session_start();
if(!isset($_SESSION['userId']) || empty($_SESSION['userId']) )
{
  header("Location: login.php");
}else{
  echo "<script>console.log('user id=".addslashes($_SESSION['userId'])."');</script>";
}

如果这不起作用,那么问题肯定出在代码的另一部分。

【讨论】:

    【解决方案2】:

    在我看来,在这种情况下使用 javascript 并不是一个好主意。
    javascript 控制台不是为 php 调试而设计的
    为什么不直接显示登录成功消息echo $_SESSION['userId'];

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-07
      • 1970-01-01
      • 1970-01-01
      • 2013-05-28
      • 2012-06-11
      • 1970-01-01
      • 2016-06-06
      相关资源
      最近更新 更多