Почему моя переменная сеанса неправильно сбрасывается в Wordpress?

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

akshithMarolie 09.04.2019 10:49

Переменная $_SESSION возвращает массив (0) { } . На странице учетной записи я отображаю (с эхом) файл cookie и переменную сеанса, и переменная сеанса никогда не удаляется, в то время как файл cookie.

Jaber Mercier 09.04.2019 10:52

ммм... это странно... вы устанавливаете переменную $_SESSION на какой-либо странице, кроме страницы учетной записи?

akshithMarolie 09.04.2019 10:59
«Все работает отлично» - неужели…? Похоже, все, что мне нужно знать, это идентификатор пользователя в вашей системе, чтобы иметь возможность «войти в систему» ​​так как этого пользователя, просто отправив идентификатор пользователя в качестве значения файла cookie connectedUser.
04FS 09.04.2019 11:03

Нет, единственный код, в котором я взаимодействую с переменными сеанса, — это два фрагмента кода. Вот почему я нахожу это действительно странным.

Jaber Mercier 09.04.2019 11:04

В настоящее время я использую простую систему аутентификации для основ. Позже я улучшу безопасность, функции и доступ к данным. Итак, моя основная проблема - это сессия...

Jaber Mercier 09.04.2019 11:06
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
6
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

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

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

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

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

Другие вопросы по теме