为什么我的会话变量在Wordpress中无法正确设置?

时间:2019-04-09 08:20:08

标签: php wordpress variables session cookies

我正在使用“记住我”选项创建身份验证系统。一切正常,除了一件事:当我不选中“记住我”复选框时,即使重新启动导航器甚至计算机后,它也可以保持连接状态。在未设置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/");

我想要的是用户离开导航器时可以选择保持连接或不保持连接。暂时,无论他们是否想要,它始终可以使他们保持联系。

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

1 个答案:

答案 0 :(得分:0)

好!我想我找到了问题的根源。我有点傻,但是让我解释一下,并告诉遇到类似问题的人。

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

寻找答案的时间太长,更改代码以找到方法后,我终于意识到了一些事情。

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

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

那是我的问题所在。

仍然感谢您的帮助!