Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Правильная авторизация на сайте 
:(
    Опции темы
serieznyi
  Дата 30.8.2012, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 19.9.2010
Где: Украина, Луганск

Репутация: нет
Всего: нет



Пишу сайт. Возникла необходимость реализовать авторизацию.
Механизм авторизации который использую в данный момент:
Код

...
$query = "SELECT id,usr FROM {$table_users} WHERE usr='{$_GET['username']}'
            AND pass='".crypt($_GET['password'], SALT)."'";
            $result = mysql_query($query);
            $num_rows = mysql_num_rows($result);
            // Если все в порядке - входим в систему
            if($num_rows==1)
            {
                $row = mysql_fetch_assoc($result);
                $_SESSION['usr']=$row['usr'];
                $_SESSION['id'] = $row['id'];
                $_SESSION['rememberMe'] = $_GET['rememberMe'];                
                setcookie('rememberMe', $_GET['rememberMe'], 0, "/");
            }
            else 
             $err[]='Ошибочный пароль или/и имя пользователя!';
...


и соответственно проверка на то что пользователь авторизован происходит по наличию $_SESSION['id'].

Так как большая часть примеров которые я нашел в сети используют хранение пароля в COKKIE я решил уточнить некоторые вопросы здесь.

1) Как реализовать "Запомнить меня"? Как я понимаю пароль хранить в куках для таких целей не логично.
Возможно нужно писать в куки $_COOKIE['rememberMe'] и идентификатор пользователя и логин.
И в случае isset($_COOKIE['rememberMe']) писать id и login в $_SESSION, что и авторизует пользователя.
Но в таком случае меня смущает факт того что идентификатором входа является ID, который как правило число 0 - N. По крайней мере у меня так. 
Меня смущает безопасность. Я так полагаю что при данном механизме авторизации я смогу поправить кукис изменив в нем сохраненный $_COKKIE['id'] и авторизоваться под любым пользователем.

Быть может в место ID в виде числа хранить какой-то хеш который генерируется из ID пользователя и его логина.

Смотрел что хранить vk.com в свои куках. У них там три ID и все они набор символов, что собственно и натолкнуло меня на мысли которые я описал выше.

Прошу подсказать как правильно реализовать данный момент авторизации или дать ссылку на нужную статью.
PM MAIL ICQ   Вверх
enoff
Дата 30.8.2012, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 30.6.2010
Где: Санкт-Петербург

Репутация: нет
Всего: 13



Код

WHERE usr='{$_GET['username']}'

http://www.phpfaq.ru/slashes

Цитата(serieznyi @  30.8.2012,  20:38 Найти цитируемый пост)
Как реализовать "Запомнить меня"?

Генерируется случайная строка, например $hash = md5($user_id . rand(0, 1000) . SALT), в базу записывается пара $user_id, $hash. В куки, соответственно, тоже.
Далее примерно такие действия:
Код

if(empty($_SESSION['user_id'])) { //если отсутствует user_id в сесси
    $cookie_hash = isset($_COOKIE['hash']) ? $_COOKIE['hash'] : false;
    $cookie_user_id = isset($_COOKIE['user_id']) ? intval($_COOKIE['user_id']) : false;
    if($cookie_hash && $cookie_user_id) { // проверяем куки
        $query = "SELECT COUNT(*) FROM user_session WHERE user_id=" . $cookie_user_id . " AND hash='" . mysql_real_escape_string($cookie_hash) . "'";
        $result = mysql_query($query); 
        if(mysql_result($result, 0)) { // сравниваем значения с записью из базы
            $_SESSION['user_id'] = $cookie_user_id; // куки правильные, пишем данные в сессию.
        }
}


Это сообщение отредактировал(а) enoff - 30.8.2012, 22:14
PM MAIL ICQ Skype GTalk   Вверх
serieznyi
Дата 30.8.2012, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 19.9.2010
Где: Украина, Луганск

Репутация: нет
Всего: нет



Благодарю. 
Но буквально несколько часов назад наткнулся на статью про Web Framework и теперь подумываю перебраться на какой нибуть из них. 
Видимо это решит некоторые мои проблемы. 

Это сообщение отредактировал(а) serieznyi - 30.8.2012, 22:37
PM MAIL ICQ   Вверх
enoff
Дата 31.8.2012, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 30.6.2010
Где: Санкт-Петербург

Репутация: нет
Всего: 13



Могу посоветовать yii. Не такой монструозный, как zend, более легкий в освоении.
Не то, что решит некоторые проблемы, а вообще переведет разработку на другой уровень, задает архитектуру приложения и направление разработки,  предоставляет огромное количество инструментов и плюшек. Перечислять можно бесконечно.
Вообщем, как по мне, самая отличная штука на php  smile 
PM MAIL ICQ Skype GTalk   Вверх
serieznyi
Дата 31.8.2012, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 19.9.2010
Где: Украина, Луганск

Репутация: нет
Всего: нет



Первым под мой взор попал CodeIgniter, но почти сразу я переметнулся к Kohana. 
Пока что осваиваю ее. Жутко раздражает структура файлов, а точнее не понимание как ее устроить. 
Когда писал сам, то все было предельно просто, а теперь вот пробеммы.

Это сообщение отредактировал(а) serieznyi - 31.8.2012, 15:15
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Сеть | Следующая тема »


 




[ Время генерации скрипта: 0.1092 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.