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

Тема в разделе "PHP программирование", создана пользователем wind2008, 5 июн 2008.

  1. wind2008

    wind2008 Гость

    Мне нужно чтобы при авторизации постоянно отслеживалось все ещё подключён ли полбзователь к сети. И если пользователь подключё то другой пользователь с таким же 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>
     
  2. etc

    etc Гость

    А сессиями почему не пользуетесь?
    Откуда у другого "такой же ID"?
     
  3. wind2008

    wind2008 Гость

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

    etc Гость

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

    Ockonal Гость

    Есть пример отслеживания с помощью сессий.
     
  6. GOsha

    GOsha Гость

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

    Ockonal Гость

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

    GOsha Гость

    Согласен.. Большинство скриптов, которые показывают UserOnline и считают открытые сессии. )))
     
Загрузка...
Похожие Темы - авторизация Php Mysql
  1. Runinterface
    Ответов:
    3
    Просмотров:
    77
  2. seoman2
    Ответов:
    52
    Просмотров:
    2.535
  3. aameno2
    Ответов:
    6
    Просмотров:
    1.300
  4. shpion8888
    Ответов:
    0
    Просмотров:
    970
  5. XiNoID
    Ответов:
    6
    Просмотров:
    1.596

Поделиться этой страницей