У меня такой вопрос к форумцам.
Для админки сайта написал скрипт проверки данных логин-пароль.
auth.php
<?php
//подключаем настройки
include('db_settings.php');
$connect =
mysql_connect($server,
$user,
$password) or
die('соединиться с базой не удалось');
mysql_select_db($db,
$connect) or
die('соединиться с базой не удалось');
if (isset($_POST['submit']))
{
if (!
empty($_POST['login']) && !
empty($_POST['password']))
{
$login =
sha1($_POST['login']);
$password =
sha1($_POST['password']);
$query =
"SELECT * FROM `$db`.`users` WHERE login='".
mysql_real_escape_string($login).
"' AND password='".
mysql_real_escape_string($password).
"'";
$qres =
mysql_query($query,
$connect) or
exit;
if ($data =
mysql_fetch_assoc($qres))
{
//если верная пара логин-пароль
//выставляем время жизни сессии
ini_set('session.cookie_lifetime', SESSION_LIFETIME
);
//убиваем прошлую сессию
//создаем новую
session_unset();
session_destroy();
session_start();
//создаем переменные сессии
$_SESSION['login'] =
$login;
$_SESSION['password'] =
$password;
//перенаправляем на главную страницу
header("Location: http://admin.example.ru/afterlogin");
}
else
{
//если неверная пара логин-пароль
//отправляем на главную страницу admin'а
session_start();
session_destroy();
//выводим сообщение об ошибке
print ERROR_WRONG_SUBMIT;
}
}
else
{
//если отправлен пустой запрос
//отправляем на главную страницу admin'а
session_start();
session_destroy();
header("Location: http://admin.example.com/");
}
}
Суть ясна: при удачной попытке пользователь попадает на страничку
http://admin.example.com/afterlogin
Однако, дабы избежать попытки проникновения на эту страничку без авторизации, я написал еще один скриптик для того случая, если кто-то попытается зайти сразу на
http://admin.example.com/afterlogin:
<?php
//загружаем настройки
include('db_settings.php');
//устанавливаем время жизни сессии (константа, определена в db_settings.php)
ini_set('session.cookie_lifetime', SESSION_LIFETIME
);
session_start();
//соединение с базой
$connect =
mysql_connect($server,
$username,
$password);
mysql_select_db($db,
$connect) or
die('соединиться с базой не удалось... '.
mysql_error($connect));
mysql_query("set names cp1251",
$connect);
//если существуют переменные сессии,
//устраиваем проверку
if (isset($_SESSION['login']) &&
isset($_SESSION['password']))
{
//определяем переменные сессии
$sess_login =
$_SESSION['login'];
$sess_password =
$_SESSION['password'];
$query =
"SELECT * FROM $db.`users` WHERE login='".
mysql_real_escape_string($sess_login).
"' AND password='".
mysql_real_escape_string($sess_password).
"'";
$qres =
mysql_query($query,
$connect) or
exit;
//если данные не совпадают
if ($data !=
mysql_fetch_assoc($qres))
{
session_start();
session_destroy();
//header("Location: http://admin.example.com/");
print ERROR_WRONG_SUBMIT;
}
//если совпали, включаем код страницы afterlogin
else
{
include('pages/afterlogin.html');
}
}
//иначе перенаправляем на главную админскую страницу
else
{
session_start();
session_destroy();
header("Location: http://admin.example.com/");
}
?>
Так вот. У меня вопрос. А если сделать в обоих файлах переменную типа
$_SESSION['is_authorized'], которой присваивать либо
true, либо
false и во втором файле проверять лишь эту переменную? Будет ли это безопасный способ?