Почему значение сеанса меняется только при первом посещении сайта пользователем - PullRequest
1 голос
/ 28 июня 2019

Я хотел добавить защиту CSRF в мою форму входа в систему, добавив скрытое поле ввода с хешированным токеном и сравнив его на сервере с сеансом, для которого был установлен токен. По какой-то странной причине значение SESSION меняется, когда пользователь впервые заходит на страницу. После обновления все работает просто отлично.

Вот краткий обзор того, как работает код

  1. Сначала пользователь отправляет свои данные в форму входа, которая выглядит как это

login.php

//PHP
$_SESSION['token'] = md5(uniqid());

//HTML
<form id="login">
  <input type="text" name="username">
  <input type="password" name="password">
  <input type="hidden" name="token" value="<?=$_SESSION['token']?>">
  <input type="submit">
<form>

Скажем, теперь значение токена

1234567890

  1. Затем данные формы отправляются на сервер с использованием jquery и ajax

login.js

$('#login').on('submit', function(e){
  e.preventDefault();
  $.ajax({
    'type': 'POST',
    'url': 'server.php',
    'dataType': 'json',
    'data': $('#login').serialize() + '&login=true',
    success: function(response){
      console.log(response);
    },error: function(response){
      console.log(response);
    }
  });
});
  1. После этого server.php получает значения POST и начинает проверять форму (вот где все смешно)

server.php

if(isset($_POST['login'])){
  if($_SESSION['token'] === $_POST['token']){
    //validate rest of the form
  }else{
    //do nothing
  }
}

По какой-то странной причине значение $ _SESSION ['token'] теперь

098765431

А проверка не пройдена

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

Может ли кто-нибудь объяснить мне, почему это может происходить и как я могу пройти это? Одним из вариантов было бы просто обновить страницу, когда проверка токена не удалась, но это все еще беспокоит меня, потому что это не должно происходить вообще.

Я также попытался добавить настройки сеанса в корневой файл, который оба файла включают в начале.

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