【问题标题】:PHP $_SESSION not working in functionPHP $_SESSION 在函数中不起作用
【发布时间】:2017-10-28 17:47:45
【问题描述】:

首先,我搜索了很多线程和主题,他们都一直在说它的功能放置,但到目前为止我没有发现我的放置有问题。我迫切希望它能够正常工作,因为我讨厌查看 50 多行重复的代码。

resetpassword.php(相关代码):

<?php
        require_once $_SERVER['DOCUMENT_ROOT'] . '/php/security/sslcheck.php';

        $ResetID = $_GET["ID"];

        session_start();
        require_once $_SERVER['DOCUMENT_ROOT'] . '/php/functionality/error.php';
        print_r(array_values($_SESSION));

        if(empty($ResetID) && !isset($_SESSION["ERR"]) && !isset($_SESSION["ERR_MSG"])) {
            $ResetPassword = "REQUEST";
            if(isset($_POST["email-search"]) && !empty($_POST["email-search"])) {
                require_once $_SERVER['DOCUMENT_ROOT'] . '/php/functionality/users/request.php';

                // Start Request Process
                $Request = RequestPasswordReset($_POST["email-search"]);

                if($Request === "USER_NOT_FOUND") {
                    DisplayError("Password Reset Request Failed", "The specified email is not tied to any accounts in our system.", "/account/resetpassword.php");
                } else if ($Request === "MAIL_FAILURE") {
                    DisplayError("Password Reset Request Failed", "Failed to email you the password reset email.", "/account/resetpassword.php");
                } else {
                    DisplayError("Password Reset Request Success", "We have sent a email that contains a link to reset your password.", "/account/resetpassword.php");
                }
            }

更多相关代码

            <?php
            if (isset($_SESSION["ERR"]) && isset($_SESSION["ERR_MSG"])) {
                echo '<div id="resetPasswordStatus">';
                echo '<h4>' . $_SESSION["ERR"] . '</h4>';
                echo '<p>' . $_SESSION["ERR_MSG"] . '</p>';
                echo '</div>';
                session_destroy();
            }
        ?>

error.php(所有代码):

<?php
  session_start();
  function DisplayError($title, $body, $returnlink) {
      $_SESSION["ERR"] = $title;
      $_SESSION["ERR_MSG"] = $body;
      header("Location: " . $returnlink);
  }
?>

我已经在许多方面尝试了我在 error.php 中的 require_once 的位置,但没有发现任何运气。我知道 $_SESSION 是一个超全局的,并且 require 或 require_once 将代码复制到需要的地方。但是,即使将 error.php 手动复制到 resetpassword.php 中,我也无法使该功能正常工作。谢谢你们的帮助,因为这真的很重要!

在请求密码重置后的回调之后,预期的输出是要显示的警报。此警报的代码可以在更多相关代码下查看。

【问题讨论】:

  • 看看你的代码,你的第一个 if 语句 !isset($_SESSION["ERR_MSG"] 你的函数永远不会被调用
  • 这个想法是当我提交密码请求时,它会执行它,然后用描述错误/警报的会话回调到同一页面。我刚刚添加的更相关的代码显示了回调的显示。问题是回调不起作用,如果我检查 $_SESSION 变量,则 ERR 和 ERR_MSG 变量 NOT 已发送。
  • 你的var_dump($_SESSION["ERR"]) 函数中的DisplayError 是否给出了预期的结果?我的意思是,问题出在超全球本身,或header。也许应该在问题中更清楚地说明预期的输出。
  • @BagusTesa 我已经完成了 print_r(array_values($_SESSION)) 并且没有返回任何内容。

标签: php function session session-variables


【解决方案1】:

解决方法:

error.php 中,如果您在标头重定向之后添加 exit();,它允许 PHP 在重定向发生时暂停执行,从而防止错误显示代码运行其代码,然后擦除离开的会话就会话而言,重定向为空。

【讨论】:

    【解决方案2】:

    你在 if 语句 empty($ResetID) 之后调用函数 如果 $_GET['ID'] 不为空,则您的函数未运行,因此请将其更改为 !empty($ResetID)

    【讨论】:

    • 读取cmets,有请求,然后回调!
    • var_dump($_SESSION); 的返回值是多少
    • 我已经完成了 print_r(array_values($_SESSION)) 并且没有返回任何内容。 @PaulE
    • 添加回显“工作”;到 DisplayError 函数和注释头(“位置:” . $returnlink);并执行 resetpassword.php.. 它是否返回 Working?
    • 确实如此。我已将 session_start 移到 error.php 中的 DisplayError 中,并使其正常工作。但是我不明白怎么做。我真的不明白我的代码现在发生了什么。 @PaulE~你介意再把这一切说成一个解决方案,以便我们可以在那里讨论吗?因此,我可以感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2012-06-23
    • 1970-01-01
    • 2012-11-09
    • 2012-10-12
    • 1970-01-01
    • 2011-03-09
    • 2019-06-05
    • 1970-01-01
    相关资源
    最近更新 更多