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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание авторизации, что-то типа практического занятия 
:(
    Опции темы
Gold Dragon
Дата 24.1.2006, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



Если не трудно, напишите хотя бы кратко алгоритм что мне нужно делать. А читал статья по регистрации (авторизации) в факе и полностью согласен с комментарием к ней, я как начинающий ничего не понял.

вот как это я вижу..
- первое открытие страницы, предлагается вход или регистрация

- проверяется наличие в базе данных о пользователе (пароль, логин)

- наверное создаётся сессия, куда пишится к ID сессии ещё, IP (хотя тут могут быть проблемы если несколько юзеров с одного прокси) и браузер. Больше думаю нет необходимости.

- далее юзер как-то узнаётся и входит на сайт под своим именем

Вопросы:
- есть ли какие особые требования к настройке PHP?
- где должны храниться данные о авторизации конкретного юзера



PS
для Модераторов: не закрывайте тему, очень много вопросов всегда по этой теме и ссылки на ФАК`ки и другие источники не помогают

для "Знающих": хотелось бы услышать конкретные примеры, а не только философию

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


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Gold Dragon
Дата 24.1.2006, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



начнём со скелета (поправляйте по ходу)

Код

<?php
if (isset($_POST['login'])){  // существуют ли данные от формы

// проверяем дальше

}else{ // если данных нет

// открываем форму для входа
$f_login = <<<PREF
Вход: <form method='POST'>
Логин: <input type='text' name='login' value=''><br>
Пароль: <input type='text' name='pasw' value=''><br>
<input type='Submit' name='login' value='Вход'><br>
</form>
PREF;
echo $f_login;
}
?>



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
IZ@TOP
Дата 24.1.2006, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

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



Считай небольшой примерчик, скелетик так сказать.

Код

<?php

class Member {
    
    /**
     * Идентификатор пользователя.
     *
     * @var int
     */
    var $mid                = 0;
    
    /**
     * Возможность гостевого просмотра страницы.
     *
     * @var boolean
     */
    var $guestaccess        = false;
    
    /**
     * Ассоциативный массив с инфой о пользователе.
     *
     * @var array
     */
    var $info                = array();
    
    /**
     * Имя сессии установленое в конфигурации.
     *
     * @var string
     */
    var $sessname            = '';
    
    /**
     * Идентификатор сессии.
     *
     * @var string
     */
    var $sessid                = '';
    
    /**
     * Время на которое скрипт может запоминать пользователя. Указано в сутках.
     *
     * @var int
     */
    var $sesstimeout        = 30;
    
    /**
     * Конструтор класса Member
     *
     * @return Member
     */
    function Member() {
        
        /**
         * Предполагаем что сессия уже начата.
         * 
         * Проверяем записана ли информация о сесси в COOKIE. 
         * Если есть, записываем ее как нашу сессию пользователя.
         * Если нет, тогда берем только что начатую.
         * 
         */
        
        if(isset($_COOKIE[$this->sessname])) {
            
            $this->sessid    = $_COOKIE[$this->sessname];
            session_id($this->sessid);
            
        } else {
        
            $this->sessid    = session_id();
            
        }
        
        /**
         * Данные о сесси мы будем хранить в базе данных,
         * поскольку хотим повторять авторизацию пользователя.
         * 
         * Для данного метоже необходима поддержка COOKIE у клиента.
         * 
         */
        
        if($this->sessValidate() === false) {
            
            if($this->guestaccess === true) {
                
                $this->sessRegGuest();
                
            }
            
        }
        
    }
    
    /**
     * С помощью данного метода мы будем проверять валидность сессии пользователя.
     * Т.е. к примеру, была ли инициализирована она вообще? Или может истек таймаут.
     * 
     */
    function sessValidate() {

        // ...
        
        /**
         * Получили данные о сессии из базы данных.
         * 
         */
        
        if($this->info['sess_last_time'] < time() - ($this->sesstimeout * 30)) {
            
            $this->authentification();
            
        }
        
        /**
         * Ну и далее по логике проверяем соответствие с браузером
         * и прочими параметрами
         */
        
    }
    
    /**
     * Вывод формы авторизации/регистрация сессии в БД.
     *
     */
    function authentification() {
        
        if(isset($_POST['submitting_data'])) {
            
            /**
             * Выбираем данные из бд. Если нету юзера, выводим форму и т.п.
             */
            
            /**
             * Если все прошло удачно, записываем данные в юзеру в куку и в БД.
             * Выходим из метода.
             */
            
            return true;
            
        }
            
        /**
         * Вывод формы для авторизации.
         * 
         * Выходим.
         */

        return false;
        
    }
    
    
    /**
     * Будем считать что это метод пустышка, который либо ничего не делает,
     * либо регистрирует пустую сессию - сессию гостя.
     */
    function sessRegGuest() {
        
        
        
    }
    
}

?>

Добавлено @ 12:04
А, и при проверке данных из БД не забываем что он может быть гостем, поэтому необходимо проверять права доступа на гостя.
А вообще гостя можно отрубить нафик.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
IZ@TOP
Дата 24.1.2006, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

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



Gold Dragon, а вообще метод с сессией и хранением инфы о ней на сервере можно обойти. Если ты этого не хочешь, покупай SSL сертификат для своего сайта и делай доступ через HTTPS.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Gold Dragon
Дата 24.1.2006, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



IZ@TOP
это уж слишком круто, мне что по проще, но и не совсем для дурака smile

Так, а теперь по классу.... а как его применять то?


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
IZ@TOP
Дата 24.1.2006, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

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



Gold Dragon, считай что это те же функции, только объединенные классом.
Использовать как? Ну дописываешь функционал (подключение к бд и т.п.), потом создаешь его объект. В общем то это все вроде бы.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




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


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

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