2017-01-03 4 views
0

На моем веб-сайте есть функция входа в систему и выхода из системы. После входа в систему, я установил сессионные переменные проходят (который хешируется пароль), UID, который является идентификатором пользователя, вошедшего в систему и LoggedIn (булевой):Переменные сеанса не обновляются на каждой странице

$hashedpass = **hashed pass**; 
    $_SESSION['pass'] = $hashedpass or die("Fel 2"); 
    $_SESSION['uid'] = $uid or die("Fel 3"); 
    $_SESSION['loggedIn'] = true or die("Fel 4"); 
    header("Location:indexloggedin.php"); 

На каждой странице, я проверить, если посетитель регистрируется в системе по

  1. Проверка состояния $_SESSION['loggedIn'],
  2. Поиск в базе данных для пользователя с идентификатором $_SESSION['uid'],
  3. Проверяется хэшируются пароль в базе данных соответствует зашифрованный пароль в переменной сеанса:

    $sespass = $_SESSION['pass']; 
    $sesid = $_SESSION['uid']; 
    
    $sql2 = "SELECT * FROM `users` WHERE `id` = '$sesid'"; 
    
    $result2 = mysqli_query($db_conx, $sql2); 
    $numrows2 = mysqli_num_rows($result2); 
    if ($numrows2 != 1) { 
        $userOk = false; 
    } 
    while ($row = mysqli_fetch_array($result2,MYSQLI_ASSOC)) { 
        $dbpass = $row['pass']; 
    } 
    
    if ($sespass != $dbpass) { 
        $userOk = false; 
    } else { 
        $userOk = true; 
    } 
    

Моя проблема заключается в том, что это, кажется, работает на некоторых страницах, в то время как он не работает в других. Например, когда я вхожу в систему, я сразу же заходил на домашнюю страницу, но не на страницу профиля. Однако после нескольких перезагрузок я также зашел на страницу профиля. То же самое происходит при выходе из системы.

Для тестирования я попытался изменить переменные пароля var_dump, а также статус userOk на индексной странице, и именно здесь я заметил что-то интересное. Когда я выхожу из системы, переменные пароля устанавливаются как пустые, а $userOk - false, в соответствии с тем, что показано на index.php?msg=loggedout. Но когда я удаляю ?msg=loggedout (и оставляю только index.php), переменные пароля возвращаются к их предыдущему значению, и меня больше не выходят из системы ... После нескольких перезагрузок я снова выхожу из системы.

Почему мои переменные сеанса работают не так, как ожидалось? Кажется, что для обновления требуется время, которое очень странно. Я попытался отключить кеширование (как через заголовки, так и через параметр «Кэш» в моем браузере).

Просто скажите мне, если вам нужно больше информации.

+0

Есть некоторые проблемы с вашим кодом только ... разделяющие нас целые страницами –

+0

Это хорошая практика, чтобы всегда использовать облицовку() перед установкой идентификатора или сеанса в БД –

+0

а где 'session_start() '? – CodeGodie

ответ

0

У вас есть инициализация session_start() на каждом сайте?

создает сеанс или возобновляет текущий на основе идентификатора сеанса, переданного через запрос GET или POST, или передается через файл cookie.

+0

Я понимаю, что вы не можете писать комментарии, но это слишком мало, чтобы быть ответом. Перепишите свой ответ более подробно и объясните, почему требуется 'session_start'. – CodeGodie

+0

ok, надеюсь, что это bether :) – ivorysmoker

+0

Да, я использую session_start() на каждой странице. –

0

После контакта с моим хостинг-провайдером это была проблема хостинга. Теперь это разрешено!

Спасибо,
Jacob

Смежные вопросы