Почему моя переменная сеанса не сбрасывается правильно в Wordpress? - PullRequest
0 голосов
/ 09 апреля 2019

Я создаю систему аутентификации с опцией Запомнить меня.Все работает отлично, за исключением одного: когда я не устанавливаю флажок «Запомнить меня», он сохраняет связь, даже после перезапуска навигатора или даже компьютера.Пока 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 голосов
/ 30 апреля 2019

ОК! Я думаю, что нашел источник своей проблемы. Я чувствую себя немного глупо, но позвольте мне объяснить и сказать, кто имеет подобную проблему.

Даже после обновления WordPress до последней версии с обновлением до PHP 7.1 и возможностью использования плагина WP Session Manager сеансы не работали.

Пройдя слишком долго, чтобы найти ответ, изменив код, чтобы найти способ, я наконец-то что-то понял.

Firefox. В настройках я установил флажок «Восстановить предыдущий сеанс». Поэтому каждый раз, когда я оставлял Firefox и возвращался к нему, он восстанавливал всю мою информацию.

Снимите флажок «Восстановить предыдущий сеанс», и он должен работать.

Отсюда и мои проблемы.

В любом случае, спасибо за вашу помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...