|
|
|
|
|
для: Nytrogen
(21.08.2008 в 17:48)
| | Инициализация $_SESSION['UserID'] и $_SESSION['SessionID'] (не несёт вообще никакой смысловой нагрузки) просходит, как видно из этого урезанного кода, только после успешной аутентификации, пройти которую невозможно, потому что $_SESSION['SessionID'] проверяется, которого изначально не существует.
Нельзя на время создания сессии проверять что-то, связанное с сессией. У Вас есть логин, пароль. Их достаточно для проверки. | |
|
|
|
|
|
|
| Добрый день.
Скажите, какие исправления нужно произвести в таком алгоритме защиты страниц, и годится ли
такая технология вообще.
Имеется три страницы: login.php, logout.php и secretPage.php.
В базе данных хранится таблица учёта пользователей:
*) ID - уникальный идентификатор записи;
*) Username - ник;
*) Password - пароль;
*) SessionID - идентификатор сессии;
*) LastVisit - время последнего входа на сайт.
login.php представляет из себя нечто следующее:
session_start();
if ($_POST['sent')) {
//если значения формуляра уже отправлены,
checkLogin();
}
function checkLogin() {
//проверяем корректность введённых данных и выводим сообщения об ошибках...
if ($error) {
return false;
}
//посылаем SQL-запрос Where Username = $_POST['Username']...
if ($number_of_rows != 1) {
return false;
}
//если введённый пароль и пароль в БД не совпадают, то выходим...
if (md5($_POST['Password']) != $password_in_DB) {
return false;
}
//если ID сессий совпадают, и при этом макс.время не вышло, то юзер уже залогинен...
if ($_SESSION['SessionID'] == $sessionID_in_DB AND $not_time_out) {
return false;
}
//если в БД хранится другой SessionID, то вход с таким именем уже выполнен...
if ($sessionID_in_DB != "" AND $not_time_out) {
return false;
}
//если всё ОК, то пускаем юзера...
//обновляем строку таблицы, Where ID = $userID:
//LastVisit = now();
//SessionID = session_id();
$_SESSION['UserID'] = $userID;
$_SESSION['SessionID'] = session_id();
}
|
А вот для secretPage.php меня хватило только на такое:
session_start();
//чувствую, одного if'а здесь мало %)
if (!$_SESSION['UserID'] OR !$_SESSION['SessionID']) {
//перекидываем на login.php
} else {
<html>Совершенно секретно!</html>
}
|
| |
|
|
|
|