Старый сеанс не уничтожается при входе в систему с новым пользователем - PullRequest
0 голосов
/ 25 июня 2018

Безопасность будет добавлена ​​позже

У меня есть сценарий входа в систему, который либо возвращает сообщение в формате json (неверное поле со списком, пустые поля и т. Д.), Либо запускает сеанс и перенаправляет пользователя в соответствии скакой пользователь вошел в систему.

Теперь есть 2 возможности: admin и user.

Когда я впервые захожу как администратор, все работает нормально, но затем я захожу как пользователь, и я вижу имя администратора и логотип, который находится в сеансе администратора.Однако я перенаправлен на правильную страницу.

Независимо от того, сколько я обновляю (даже жесткое обновление Ctrl + Shift + R), я не могу отобразить правильную информацию о пользователе, только если я запускаю инкогнитоокно в Chrome и войдите в систему как пользователь первым.

Иногда, когда я вхожу в систему, меня также сразу же перенаправляют в форму для входа.Так что что-то определенно не так в моем коде, но я не уверен, что.

Мой PHP-скрипт, который вызывается с помощью ajax-кода и запускает сеанс, возвращается как JSON, возможно ли даже запустить сеанс, когда этоэто тот случай?

Мой код ajax сейчас:

// Login Ajax Code
$( "#content" ).on("submit", "#loginform", function( event ) {
  // Stop normal form behaviour
  event.preventDefault();
  // Retrieve input fields and their values
  var $form = $( this ),
  $username = $form.find( "input[name='username']" ).val(),
  $userpassword = $form.find( "input[name='userpassword']" ).val(),
  url = $form.attr( "action" );
  // Post above values to the action of the form
  var posting = $.post( url, { username: $username, userpassword: $userpassword} );
  // Show result in a div
  posting.done(function( data ) {
    obj = JSON.parse(data);
    if(obj.userdata == ''){
      $( "#loginresult" ).empty().slideDown('fast').append( obj.message );
    }else if(obj.userdata == 'admin'){
      window.location.href = "http://www.vcaweb.nl/admin";
    }else if(obj.userdata == 'user'){
      window.location.href = "http://www.vcaweb.nl/dashboard";
    }
  }, "json");
});

Мой скрипт php:

<?php
session_start();

*connection class is here*
$conn = new Connection;

$username = $_POST['username'];
$userpassword = $_POST['userpassword'];

*error messages code not relevant*
else{
  //Both filled in, begin logincode:
  $getuser = "
    SELECT u.id as userid, u.username, u.rights, u.password, c.name, c.userid as companyuid, c.logo
    FROM users u
    LEFT JOIN company c
    ON u.id = c.userid
    WHERE u.username = '".$conn->real_escape_string($username)."'";
  $getusercon = $conn->query($getuser);
  $getuser = $getusercon->fetch_assoc();

    if(!empty($getuser['logo'])){
      $sessionlogo = str_replace('/home/vcaweb/public_html/', '', $getuser['logo']);
    }else{
        $sessionlogo = 'Hier een placeholder';
    }

  if($userpassword == $getuser['password']){
    if($getuser['rights'] == '1'){
      $_SESSION['userdata']['user'] = 'Mark Kraaijo';
            $_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);
  }
}
?>

В моем заголовке перенаправленных страниц есть следующее:

// Check if session is set
if(isset($_SESSION['userdata'])){
  // Check if user is admin, if yes and user has rights to visit page, redirect to loginpage
  if($_SESSION['userdata']['rights'] == '0' && $restriction == 'admin'){
    header('Location: http://www.vcaweb.nl/login');
  }
  // Logo
  $logo = '<img class="headerlogo" src="'.$_SESSION['userdata']['logo'].'">';
}else{
  header('Location: http://www.vcaweb.nl/login');
}

И в заголовке моей формы входа в систему (включая мой файл класса соединения, который запускает сеанс):

session_unset();
session_destroy();

Почему сеанс не уничтожается полностью?

1 Ответ

0 голосов
/ 25 июня 2018

Удалите сеанс пользователя с помощью unset($_SESSION['userdata']); и используйте session_regenerate_id(true) сразу после session_start()

Использование функции session_destroy() является правильным, но session_unset() используется для устаревших способов создания сеанса.

Пожалуйста, перейдите по этой ссылке для получения дополнительной информации http://php.net/manual/ro/function.session-destroy.php

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