【问题标题】:Why isn't my session variable unsetting correctly in Wordpress?为什么我的会话变量没有在 Wordpress 中正确取消设置?
【发布时间】:2019-08-30 11:18:06
【问题描述】:

我正在制作一个带有记住我选项的身份验证系统。一切正常,除了一件事:当我不选中记住我复选框时,它让我保持连接,即使在重新启动我的导航器甚至我的计算机之后也是如此。当 cookie 未设置时,会话变量保持不变。

我已经尝试了很多东西,但是重启一切后会话变量仍然不正常。

这是我的帐户页面代码:

if (!session_id()) {
   session_start();
}

$secondDB = new wpdb('XXX', 'XXX', 'XXX', 'XXX');

$allCustomers = $secondDB->get_results("SELECT * FROM client");

if (!isset($_COOKIE["connectedUser"])) $_COOKIE["connectedUser"] = false;
if ($_COOKIE["connectedUser"]=='null') $_COOKIE["connectedUser"] = false;

echo "Cookie : ".$_COOKIE["connectedUser"]."<br>";
echo "Session : ".$_SESSION["connectedUserID"]."<br>";

if($_COOKIE["connectedUser"] != false && !isset($_SESSION["connectedUser"]))
{
    $_SESSION["connectedUserID"] = $_COOKIE["connectedUser"];
}

if(isset($_SESSION["connectedUserID"]))
{
    foreach($allCustomers as $customer)
    {
        if($customer->client_id == $_SESSION["connectedUserID"])
        {
            foreach($customer as $key=>$value) {
                echo "<strong>".$key." : </strong>".$value."<br>";
            }
        }
    }
    echo "<br>";
    echo "<a href=\"http://numerisat.fr/deconnexion/\">Log out</a>";
} else {
    // AUTHENTIFICATION
    echo "<form action=\"\" method=\"POST\">";
    echo "<label for=\"username\">Login :</label>";
    echo "<input type=\"text\" name=\"username\" required/>";
    echo "<label for=\"password\">Password :</label>";
    echo "<input type=\"password\" name=\"password\" required/>";
    echo "<label for=\"remember\">Remember me</label>";
    echo "<input type=\"checkbox\" name=\"remember\"/>";
    echo "<input type=\"submit\" name=\"valider\" value=\"Log in\">";
    echo "</form>";

    $authResult = "";

    if(!empty($_POST["username"]) && !empty($_POST["password"]))
    {
        foreach($allCustomers as $customer) {
            if($customer->client_username == $_POST["username"])
            {
                if($customer->client_password == md5($_POST["password"]))
                {
                    $_SESSION["connectedUserID"] = $customer->client_id;
                    if($_POST["remember"] == "on")
                    {
                        setcookie("connectedUser", $_SESSION["connectedUserID"], time()+3600*24*15, "/");
                    }
                    header('Location: http://numerisat.fr/espace-client/');
                } else {
                    $authResult = "Invalid login or password. Please try again.";
                }
            } else {
                $authResult = "Invalid login or password. Please try again.";
            }
        }
        echo $authResult;
    }
}

这是我的注销代码:

if (!session_id()) {
   session_start();
}

unset($_COOKIE["connectedUser"]);
setcookie("connectedUser", false, time()-3600, "/");
unset($_SESSION["connectedUserID"]);
session_destroy();
header("Location: http://numerisat.fr/espace-client/");

我想要的是用户可以在离开导航器时选择是否保持连接。目前,无论他们是否愿意,它始终让他们保持联系。

您对这个问题的来源有任何解释吗?我有点迷路了。谢谢!

【问题讨论】:

  • 在调用 session_destroy() 后尝试将 $_SESSION 变量转储到注销代码中以检查其是否正确销毁。
  • $_SESSION 变量返回 array(0) { } 。在帐户页面上,我显示(带有回显)cookie 和会话变量,会话变量永远不会被删除,而 cookie 是。
  • mm...这很奇怪..您是否在帐户页面以外的任何页面中设置 $_SESSION 变量?
  • “一切正常” - 真的……?看起来我只需要知道您系统中用户的 ID,以便能够“登录”作为该用户,只需将用户 ID 作为 cookie 的值发送@ 987654323@.
  • 不,我与会话变量交互的唯一代码是这两个代码 sn-ps。这就是为什么我觉得这很奇怪。

标签: php wordpress variables session cookies


【解决方案1】:

好的!我想我找到了问题的根源。我觉得有点愚蠢,但让我解释一下,并告诉谁有类似的问题。

即使将 WordPress 更新到最新版本并升级到 PHP 7.1 并能够使用 WP 会话管理器插件,会话仍无法正常工作。

在找了太久的答案之后,改变我的代码来寻找方法,我终于意识到了一些事情。

火狐。在设置中,我选中了“恢复上一个会话”框。因此,每次我离开 Firefox 并重新使用它时,它都会恢复我的所有信息。

取消选中“恢复上一个会话”框,它应该可以工作。

这就是我的问题所在。

感谢您的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-02
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-01
    • 2013-02-17
    相关资源
    最近更新 更多