Содержимое сеанса не удаляется с помощью session_destroy (); или не установлен - PullRequest
0 голосов
/ 02 июля 2018

У меня была эта проблема в течение нескольких дней, и я не могу исправить это, что бы я ни пытался.

Существует форма входа, которая перенаправляет вас на /dashboard или /admin в зависимости от данных, которые находятся в запущенном сеансе из моего логинскрипта.

Это моя структура:

index.php (contains header with connection.php and the html login form)
dashboard.php (contains header with connection.php and some irrelevant html)
admin.php (same as above)
header.php (at the top of all pages, has connection.php included at the first line).
connection.php (my connection script, with at the top line session_start();
login.php (my loginscript, this script is called with ajax so I have to add my entire connection class in here with session_start(); again at the top.
logout.php (my logout script, it kills the session and redirects to login page this is linked to in my header.php)

В моем логинскрипте есть следующая часть:

if($userpassword == $getuser['password']){
    if($getuser['rights'] == '1'){
      $_SESSION['userdata']['user'] = 'Administrator';
            $_SESSION['userdata']['rights'] = '1';
            $_SESSION['userdata']['logo'] = 'assets/images/logo.png';
      $loginresult = array(
        'login_result' => 'success',
     );
      $logindata = array(
        'userdata' => 'admin',
     );
    echo json_encode($logindata);
    }else{
      $_SESSION['userdata']['user'] = $getuser['name'];
            $_SESSION['userdata']['rights'] = '0';
            $_SESSION['userdata']['logo'] = $sessionlogo;
      $loginresult = array(
        'login_result' => 'success',
     );
      $logindata = array(
        'userdata' => 'user',
     );
    echo json_encode($logindata);
    }
  }else{
    $logindata = array(
        'userdata' => '',
        'message' => 'Wachtwoord en gebruikersnaam komen niet overeen',
 );
echo json_encode($logindata);
}

Вкратце: когда пользователь входит в систему как администратор, он видит имя Administrator, а когда он входит в систему с другой учетной записью из моей базы данных, он видит это конкретное имя.

Мой выход из системы.php:

<?php
session_start();
unset($_SESSION['userdata']);
header("Location: http://website.nl/login");
die();
?>

Я также пытался session_destroy(); вместо unset

Теперь, когда я, например, захожу с правами администратора, все работает нормально, но если я затем захожу и захожу под именем пользователя, я перенаправляюсь на правильную страницу, но все равно вижу имя Administrator, хотя я и не являюсь ? Это работает и наоборот.

Таким образом, сеанс устанавливается и заполняется данными, но при выходе и повторном входе этот сеанс не заменяется / удаляется, он просто сохраняется.

Почему это? Единственное, о чем я могу думать, это мой login.php, который вызывается с помощью ajax. Это только место, где другая session_start (); присутствует, но если я удалю его, мой логинскрипт больше не будет работать.

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