в базе поле логина, естественно,
Входной скрипт проверяет логин и пароль и выдает две куки. В первой ? логин, чтобы сразу опознать пользователя ( в базе поле логина, естественно, уникальное или даже ключевое). Во второй куке ? хэш от времени входа и пароля (для полноты конспирации я добавляю к этим строкам букву "Ы" ? тогда хэш подобрать почти невозможно :).
Все остальные программы подключают код, который делает следующее. Делает запрос в базу ? выбирает строку с полученным логином. Из этой строки берет поле "log_time" и пароль и делает из них, как и описано выше, хэш. Сравнивает его с тем, что получил, и если они совпадают, выдает новую куку хэша, опять же, от пароля, времени и буквы "Ы" и делает запрос в базу данных "UPDATE user SET log_time='...' WHERE login='$cookie_login'".
if (isset($HTTP_COOKIE_VARS[$cookie_login]) && isset($HTTP_COOKIE_VARS[$cookie_code])) {
$login = $HTTP_COOKIE_VARS[$cookie_login];
$code = $HTTP_COOKIE_VARS[$cookie_code];
$result = mysql_query("SELECT date_format(log_date,'%Y%m%d%H%i%s') as log_date1, pass, uid FROM user WHERE email='$login' AND log_date>'DATE_SUB(NOW(),INTERVAL 15 MINUTE)'");
if (!mysql_error() && @mysql_num_rows($result)==1) {
$log_time0 = time();
$log_time1 = date("YmdHis", $log_time0);
$log_time2 = date("Y-m-d H:i:s", $log_time0);
$current_user = mysql_fetch_array($result);
if (md5($current_user["pass"].$current_user["log_date1"].$md5letter) == $code) {
mysql_query("UPDATE user SET log_date='$log_time2' WHERE uid=". $current_user["uid"]);
setcookie($cookie_code, md5($current_user["pass"].$log_time1.$md5letter), time()+900, $site_path);
$auth = true;
}
else
unset($current_user);
};
};
Опять же, здесь нет никакой защиты от подбора и атаки на сервер (кстати, здесь можно вместо буквы "Ы" писать IP-адрес пользователя ? чтобы, например, соседу по офису нельзя было взять файл с кукой и зайти со своего компьютера).
Это всё, что я хотел сказать сегодня. Защита от подбора и сессии ? на следующей неделе.
Содержание Назад Вперед