【问题标题】:Trouble using Session variable in header redirect在标头重定向中使用 Session 变量时遇到问题
【发布时间】:2016-01-03 23:04:56
【问题描述】:

如果用户未登录,我将使用以下内容锁定位置,以便登录成功后我可以返回此位置

$_SESSION['returnURL'] = htmlspecialchars($_SERVER['REQUEST_URI'], ENT_QUOTES);

在我的标头重定向中使用此会话变量时我没有运气。目前这个变量的内容是:/event.php?title=Test&id=16

if($sql->num_rows==1) {
    if (isset($_SESSION['returnURL'])){
        $_SESSION['username'] = $username;
        header("location:$_SESSION['returnURL'])";
        unset($_SESSION['returnURL']);
    } else {
        $_SESSION['username'] = $username;
        header('location:home.php');
    }
} else {
    die(header("location:login.php?login-failed=true&reason=not_found"));
}

当我将$_SESSION['returnURL'] 的内容替换为$_SESSION['returnURL'] 中存储的地址时,它可以完美运行。当我将 $_SESSION['returnURL'] 变量与我认为的标头一起使用时,出现了问题。

【问题讨论】:

  • 那么您在第一行header 中有语法错误。
  • 你能具体点吗...我没看到。正如我所提到的,如果我用会话中实际存储的内容替换我的变量(我正在复制和粘贴内容),它会很好地工作。不是每次都会抛出语法错误吗?
  • header("location:$_SESSION['returnURL'])"; 中,您缺少标题函数的关闭)。我没有发布答案,因为它可能只是一个错字。下面的答案也解决了您的问题。

标签: php session


【解决方案1】:

这一行的问题:

header("location:$_SESSION['returnURL'])";

修正右括号:

header("location:$_SESSION['returnURL']");

并在带引号的字符串中为数组变量使用大括号:

header("location:{$_SESSION['returnURL']}");

还有:

htmlspecialchars('/event.php?title=Test&id=16', ENT_QUOTES);
// Results in: /event.php?title=Test&id=16

这是一个不同的 URL。此处无需转换为 html 实体。

【讨论】:

  • 我已经修正了我的错字并添加了花括号。我的 session['returnURL'] 已设置,但无法识别。当我检查存储了哪些会话时,我有:Array ( [returnURL] => /event-signup.php?title=The%20Seriousness%20of%20Enjoying%20Your%20Group%20Resistances&id=17 ) 当我运行代码时,我总是收到“home.php”。我的 if 语句由于某种原因失败了。
猜你喜欢
  • 1970-01-01
  • 2021-02-14
  • 1970-01-01
  • 2012-12-21
  • 2015-07-12
  • 1970-01-01
  • 2020-05-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多