Файлы cookie PHP, поддерживающий сеанс

#php #session #cookies

#php #сеанс #файлы cookie

Вопрос:

Мне нужна помощь в обслуживании пользовательских сеансов на случай сбоя моего веб-сервера. У меня настроен HAProxy, который распространяет запросы пользователей на мои 2 веб-сервера.

Допустим, пользователь A входит в систему на веб-сервере 1, и если веб-сервер 1 выходит из строя, HAProxy отправляет запрос на следующий доступный веб-сервер, в данном случае веб-сервер 2.

Моя проблема в том, что я не могу сохранить сеанс пользователя при сбое веб-сервера 1 и отправить его на веб-сервер 2. Поэтому мои друзья предложили мне использовать cookies в PHP. Я не знаком с cookies в PHP, но, по-видимому, это похоже на СЕАНСЫ.

Вот мой код, который регистрирует пользователя:login.php

   $conn_error = 'Could not connect.';
  $mysql_db = 'grupo5';
  if(!mysql_connect('localhost', 'vitorpnm', '') || !mysql_select_db($mysql_db)) {
  die($conn_error);
}

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

$userBusca = mysql_query("SELECT * FROM users WHERE id='$username' AND password='$password'");

if (mysql_num_rows($userBusca) == 1) {
    session_start(); //inicia sessao

      $_SESSION['id'] = $_POST['username'];
      $_SESSION['password'] = $password;

      header("Location:main.php");

} else {
  echo '<a href="javascript:history.go(-1)">Utilizador e/ou senha invalidos! (Clique aqui para voltar a pagina de login)</a>';
}

?>
  

Проверьте, вошел ли пользователь в систему или нет

 @session_start();
    if(isset($_SESSION['id'])) {

    } else { //user not logged in
    header("Location:ask_login.php");
    }
?>
  

Ответ №1:

Для cookie вам просто нужно внести эти изменения:

 <?php
$conn_error = 'Could not connect.';
$mysql_db = 'grupo5';
if (!mysql_connect('localhost', 'vitorpnm', '') || !mysql_select_db($mysql_db)) {
    die($conn_error);
}

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

$userBusca = mysql_query("SELECT * FROM users WHERE id='$username' AND password='$password'");

if (mysql_num_rows($userBusca) == 1) {
    session_start(); //inicia sessao

    setcookie('id', $_POST['username']); //$_SESSION['id'] = $_POST['username'];
    setcookie('password', $_POST['password']); //$_SESSION['password'] = $password;

    header("Location:main.php");
} else {
    echo '<a href="javascript:history.go(-1)">Utilizador e/ou senha invalidos! (Clique aqui para voltar a pagina de login)</a>';
}
?>
  

Проверьте, вошел ли пользователь в систему:

 <?php

if (isset($_COOKIE['id'])) {

} else { //user not logged in
    header("Location:ask_login.php");
}
?>
  

Но помните: файлы cookie сохраняются локально на клиентском компьютере. Таким образом, пользователь может просматривать значения файлов cookie. Было бы лучше, если бы вы зашифровали данные cookie, чтобы пользователь не мог видеть значения в виде обычного текста.

Что вы также можете делать с файлами cookie, вы можете прочитать здесь: PHP-Manual для set_cookie