Я создал админ-панель для клиента на PHP, которая требует входа в систему. Вот код в верхней части страницы администратора, требующий входа пользователя:
admin.php
<?php
session_start();
require("_lib/session_functions.php");
require("_lib/db.php");
db_connect();
//if the user has not logged in
if(!isLoggedIn())
{
header('Location: login_form.php');
die();
}
?>
Очевидно, что оператор if - это то, что ловит их и заставляет их войти в систему. Вот код на странице входа в систему:
login_form.php
<form name="login" action="login.php" method="post">
Username: <input type="text" name="username" />
Password: <input type="password" name="password" />
<input type="submit" value="Login" />
</form>
Какая информация отправляется на эту страницу контроллера:
login.php
<?php
session_start(); //must call session_start before using any $_SESSION variables
include '_lib/session_functions.php';
$username = $_POST['username'];
$password = $_POST['password'];
include '_lib/db.php';
db_connect(); // Connect to the DB
$username = mysql_real_escape_string($username);
$query = "<grab username, hashed password from DB>;";
$result = mysql_query($query);
if(mysql_num_rows($result) < 1) //no such user exists
{
header('Location: login_form.php?login=fail');
die();
}
$userData = mysql_fetch_array($result, MYSQL_ASSOC);
db_disconnect();
$hash = hash('<myHashingFunction>', $password . $userData['salt']);
if($hash != $userData['password']) //incorrect password
{
header('Location: login_form.php?login=fail');
die();
}
else
{
validateUser(); //sets the session data for this user
}
header('Location: admin.php');
?>
и страница функций сеанса, которая предоставляет функции входа в систему, содержит это:
session_functions.php
<?php
function validateUser()
{
session_regenerate_id (); //this is a security measure
$_SESSION['valid'] = 1;
$_SESSION['userid'] = $username;
}
function isLoggedIn()
{
if($_SESSION['valid'])
return true;
return false;
}
function logout()
{
$_SESSION = array(); //destroy all of the session variables
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
);
}
session_destroy();
}
?>
Я взял код session_functions.php онлайн-учебника, поэтому он может быть подозрительным.
Есть идеи, почему пользователь входит в админ-панель, пытается что-то сделать, вынужден повторно войти в систему, а затем в админ-панели разрешается делать что-то, как обычно?