У меня такой вопрос к форумцам.
Для админки сайта написал скрипт проверки данных логин-пароль.
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 и во втором файле проверять лишь эту переменную? Будет ли это безопасный способ?