我需要一些帮助来维护用户会话,以防我的web服务器失败。我配置了一个HAProxy,将用户请求传播到我的2个web服务器。
假设用户A在Webserver 1上登录,如果Webserver 1失败,HAProxy将请求发送到下一个可用的Webserver,在本例中是Webserver 2。
我的问题是,我不能设法保存用户会话,当WebServer 1失败并将其发送到WebServer 2。所以我的朋友建议我在PHP中使用cookie。我不熟悉PHP中的cookie,但显然它与SESSIONS类似。
下面是我登录用户的代码: login。
$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");
}
?>
对于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保存在客户端pc的本地。因此用户可以观察cookie值。最好对cookie数据进行加密,这样用户就看不到纯文本的值了。
你也可以用cookie做什么你可以在这里阅读:PHP-Manual for set_cookie