авторизация Php + Mysql + куки?

  • Автор темы wind2008
  • Дата начала
W

wind2008

Гость
#1
Мне нужно чтобы при авторизации постоянно отслеживалось все ещё подключён ли полбзователь к сети. И если пользователь подключё то другой пользователь с таким же ID не мог зайти. Подскажите как это сделать. Заранее благодарен. Александр

Моя авторизация сейчас выглядит так:


<?
// Страница авторизации


# Функция для генерации случайной строки
function generateCode($length=6) {
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHI JKLMNOPRQSTUVWXYZ0123456789";
$code = "";
$clen = strlen($chars) - 1;
while (strlen($code) < $length) {
$code .= $chars[mt_rand(0,$clen)];
}
return $code;
}


# Соединямся с БД
mysql_connect("localhost", "***", "***");
mysql_select_db("alexander");



if(isset($_POST['submit']))
{
# Вытаскиваем из БД запись, у которой логин равняеться введенному
$query = mysql_query("SELECT user_id, user_password FROM users WHERE user_login='".mysql_real_escape_string($_POST['login'])."' LIMIT 1");
$data = mysql_fetch_assoc($query);

# Соавниваем пароли
if($data['user_password'] === md5(md5($_POST['password'])))
{
# Генерируем случайное число и шифруем его
$hash = md5(generateCode(10));

if(!@$_POST['not_attach_ip'])
{
# Если пользователя выбрал привязку к IP
# Переводим IP в строку
$insip = ", user_ip=INET_ATON('".$_SERVER['REMOTE_ADDR']."')";
}

# Записываем в БД новый хеш авторизации и IP
mysql_query("UPDATE users SET user_hash='".$hash."' ".$insip." WHERE user_id='".$data['user_id']."'");

# Ставим куки
setcookie("id", $data['user_id'], time()+60*60*24*30);
setcookie("hash", $hash, time()+60*60*24*30);


// # Переадресовываем браузер на страницу проверки нашего скрипта
//header("Location: check.php"); exit();
//print "peremennaya avtorizacia = ".$autoriz."rrr";
$autoriz=$data['user_id'];
if ($autoriz==1) header("Location: *.html");//print "стравнение корректно";
if ($autoriz==6) header("Location: **.html");//print "стравнение корректно";
if ($autoriz==7) header("Location: ***.html");//print "стравнение корректно";
print " апплет для вашего user_id = ".$autoriz." не определён";

}
else
{
print "Вы ввели неправильный логин/пароль";
}
}
?>
<form method="POST">
Логин <input name="login" type="text"><br>
Пароль <input name="password" type="password"><br>
Не прикреплять к IP(не безопасно) <input type="checkbox" name="not_attach_ip"><br>
<input name="submit" type="submit" value="Войти">
</form>
 
W

wind2008

Гость
#3
ну к примеру ID группы в которую входит этот пользователь. Значит можно отслеживать не вышел ли пользователь с сайта используя сессии. Как? Есть пример?
 
E

etc

Гость
#4
Значит можно отслеживать не вышел ли пользователь с сайта используя сессии.
Нет, но сессии это стандартный механизм при аутентификации, + там и тайм-ауты и еще всякого хватает.
А "отслеживать" придеться "руками", только вот зачем? Есть подозрение что у вас чтото в архитектуре не то ...
 
O

Ockonal

Гость
#5
Есть пример отслеживания с помощью сессий.
 
G

GOsha

Гость
#6
Хмм весело. Допустим, если вы записываете в куку ID, тогда получим, что обе куки одинаково проходят. ))) ПОтому что и та и та вернет нужный ID. Вам нужно куда-нибудь записать id сессии - он у каждого юзера уникален и сверять, чтобы ни куку-ни сессию подставить нельзя было.. ))) МОжно еще извернуться и писать при логине контрольные значения в базу, где будет записан ID сессии и время последнего действия. )) Сделать timeout 5 мин. И удалять уставревшие записи каким-нить garbage_collector'ом, который Вы напишете сами. ))) А вообще - чем проще авторизация - тем труднее ее взломать - меньше шансов наделать дырок)))
 
O

Ockonal

Гость
#7
>Допустим, если вы записываете в куку ID, тогда получим, что обе куки одинаково проходят. ))) ПОтому что и та и >та вернет нужный ID. Вам нужно куда-нибудь записать id сессии
ID сессии, как раз, и записывается в cookies... Ну, или настроить, чтобы создавались временные файлы на сервере.
 
G

GOsha

Гость
#8
Согласен.. Большинство скриптов, которые показывают UserOnline и считают открытые сессии. )))