DL
26.6.2001
Способ этот применим там, где, во-первых, пользователей много, и их контингент постоянно меняется. Во-вторых, где нужно сделать удобный вход - чтобы можно было зайти в систему, введя логин и пароль в форме на странице.
Рисуем форму и делаем файл, который получает логин и пароль (защиту от подборки я уде описывал, допишите её сюда сами).
// обработка строки с логином
$login = str_repalce("'", "", $login);
$login_result = mysql_query("SELECT id FROM user WHERE login='$login' AND pass='". md5($pass). "'");
if (!mysql_error() && @mysql_num_rows($login_result)==1) {
/* выдача кук. Имена кук и путь лучше во избежание путаницы определять в едином подключаемом файле. */
setcookie($COOKIE_LOGIN_NAME, $login, time()+3600, $COOKIE_PATH);
setcookie($COOKIE_PASSW_NAME, $pass, time()+3600, $COOKIE_PATH);
/* Сразу же после входа пользователя перенаправляют на закрытый паролем адрес. */
header("Location: /somepath/");
exit;
}
elseif (!mysql_error()) {
/* вывод сообщения об ошибке и формы для повторного ввода */
print ("Неправильный логин или пароль.");
}
else
print (mysql_error());
Все закрытые страницы вызывают файл, в котором проверяется правильность пароля, полученного из куки:
$login = str_repalce("'", "", $HTTP_COOKIE_VARS[$COOKIE_LOGIN_NAME]);
$login_result = mysql_query("SELECT id FROM user WHERE login='$login' AND pass='". md5($HTTP_COOKIE_VARS[$COOKIE_PASSW_NAME]). "'");
if (!mysql_error() && @mysql_num_rows($login_result)!=1) {
/* Если такой строки в таблице нет, пользователь перенаправляется на страицу входа в систему. */
header("Location: /login.php");
exit;
}
else
print (mysql_error());
Имена кук будут использоваться в нескольких местах, поэтому лучше заранее поместить их в одном месте (например, объявив константы), чтобы потом не исправлять по нескольку раз.