#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