Я делаю систему аутентификации с опцией «Запомнить меня». Все работает нормально, за исключением одного: когда я не устанавливаю флажок «Запомнить меня», он держит меня на связи даже после перезагрузки моего навигатора или даже моего компьютера. Пока файл 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 возвращает массив (0) { } . На странице учетной записи я отображаю (с эхом) файл cookie и переменную сеанса, и переменная сеанса никогда не удаляется, в то время как файл cookie.
ммм... это странно... вы устанавливаете переменную $_SESSION на какой-либо странице, кроме страницы учетной записи?
connectedUser
.
Нет, единственный код, в котором я взаимодействую с переменными сеанса, — это два фрагмента кода. Вот почему я нахожу это действительно странным.
В настоящее время я использую простую систему аутентификации для основ. Позже я улучшу безопасность, функции и доступ к данным. Итак, моя основная проблема - это сессия...
OK ! Кажется, я нашел источник своей проблемы. Я чувствую себя немного глупо, но позвольте мне объяснить и рассказать, у кого есть похожая проблема.
Даже после обновления WordPress до последней версии для обновления до PHP 7.1 и возможности использования плагина WP Session Manager сеансы не работали.
После слишком долгих поисков ответа, изменения кода, чтобы найти способ, я наконец кое-что понял.
Fire Fox. В настройках поставил галочку "Восстановить предыдущую сессию". Поэтому каждый раз, когда я выходил из Firefox и возвращался к нему, он восстанавливал всю мою информацию.
Снимите флажок «Восстановить предыдущий сеанс», и он должен работать.
Отсюда и пошли мои проблемы.
Спасибо в любом случае за вашу помощь!
попробуйте сбросить переменную $_SESSION в код выхода из системы после вызова session_destroy(), чтобы проверить, правильно ли она уничтожена.