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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Авторизация пользователей, посмотрите класс 
:(
    Опции темы
HAS
Дата 17.10.2010, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ing
*


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

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



Добрый день.
Разбираюсь с программированием и с объектно ориентированным подходом.
Написал класс авторизации пользователей, прошу посмотреть, высказать свое мнение по поводу логики, кода.
Буду рад конструктивной критике.
Спасибо.

Код

<?php
if(!isset($_SESSION)) 

session_start(); 

error_reporting(E_ALL);

class Auth{
private $link;
public $sid;

    function __construct(){
        $this->link = mysql_connect("localhost", "root", "");
        mysql_select_db("gbook");
        $this->sid = session_id();
    }
    
    /*
       функция "запомнить меня"
    */
    public function RememberUser(){
    setcookie ("login", $this->sid, time() + 100000);
    
    }

    /*
       проверка корректности логина/пароля;
    */
    public function validateUser($email, $password){
        $q = "SELECT * FROM users WHERE login='{$email}' and password='{$password}'";
        $r = mysql_query($q);
        
        if (mysql_num_rows($r) == 1){ 
        return TRUE;
        } else {
        return FALSE;
        }
    }


    /*
       авторизация пользователя;
    */
    public function AuthUser($email){
        $q = "UPDATE users SET session='{$this->sid}' WHERE login='{$email}'";
        $r = mysql_query($q);
        $_SESSION['login'] = $this->sid;

    }

    /*
       проверка авторизованности пользователя;
    */
    public function AuthUserNow(){
    if (isset($_SESSION['login'])) {
    return true;
    } else {
    if (isset($_COOKIE['login'])){
        $login = $_COOKIE['login'];
        if ($this->Getuid($login)>0) {
        $this->RememberUser();
        
        $q = "UPDATE users SET session='{$this->sid}' WHERE id='{$this->Getuid($login)}'";
        $r = mysql_query($q);
        
        $_SESSION['login'] = $login;
        
        return true;
        
        } else { echo 'нет такого'; return false; }
    } else { echo 'авторизуйтесь'; return false; }
    }
    echo 'авторизуйтесь';
}
    /*
       возвращает id пользователя;
    */
    public function Getuid($sid){
    $q = "SELECT id FROM users WHERE session='{$sid}'";
    $r = mysql_query($q);
    if (mysql_num_rows($r) == 1){
    $row=mysql_fetch_array($r);
    return $row['id'];
    } else return 0;
    }
    
    /*
       возвращает имя пользователя;
    */    
    public function Getusername($sid){
    $q = "SELECT login FROM users WHERE session='{$sid}'";
    $r = mysql_query($q);
    if (mysql_num_rows($r) == 1){
    $row=mysql_fetch_array($r);
    return $row['login'];
    } else return 0;
    }
    
    
    public function logoutUser(){
        if ($this->AuthUserNow()) {
            unset($_SESSION['login']);
            setcookie('login', '');
            
        }
    }    
    
    function __destruct(){
    mysql_close($this->link);
    }
    
}
    
?>


Это сообщение отредактировал(а) HAS - 17.10.2010, 12:23
PM MAIL   Вверх
bars80080
Дата 17.10.2010, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

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



а не многовато ли запросов? один раз при авторизации выбрал все данные, положил в массив и более не трогаешь базу

а тут ещё специальное соединение открывается. больше обычно на сайте запросов к БД не осуществляется?


PM MAIL WWW   Вверх
HAS
Дата 17.10.2010, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ing
*


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

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



bars80080, не совсем Вас понял, не могли бы пояснить?
PM MAIL   Вверх
bars80080
Дата 17.10.2010, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

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



ну, смотри:

    /*
       проверка корректности логина/пароля;
    */
    public function validateUser($email, $password){
        $q = "SELECT * FROM users WHERE login='{$email}' and password='{$password}'";
        $r = mysql_query($q);


   /*
       возвращает id пользователя;
    */
    public function Getuid($sid){
    $q = "SELECT id FROM users WHERE session='{$sid}'";



   /*
       возвращает имя пользователя;
    */    
    public function Getusername($sid){
    $q = "SELECT login FROM users WHERE session='{$sid}'";

три запроса. зачем? почему нельзя всё получить ещё при авторизации в первом?


Цитата(bars80080 @  17.10.2010,  13:14 Найти цитируемый пост)
а тут ещё специальное соединение открывается. больше обычно на сайте запросов к БД не осуществляется?

в классе присутствует подключение к базе. вопрос: больше на сайте база не используется?
PM MAIL WWW   Вверх
HAS
Дата 17.10.2010, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ing
*


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

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



bars80080, понял. Только это не функция авторизации, а проверка валидности. Но суть я понял, т.е. если пользователь валидный вытаскиваем один раз массив и дальше работаем с массивом.


Цитата(bars80080 @  17.10.2010,  13:30 Найти цитируемый пост)
в классе присутствует подключение к базе. вопрос: больше на сайте база не используется?


База используется.
PM MAIL   Вверх
bars80080
Дата 17.10.2010, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

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



Цитата(HAS @  17.10.2010,  13:36 Найти цитируемый пост)
База используется. 

тогда зачем специальное подключение? логичнее было бы передавать уже готовый объект, содержащий в себе открытое подключение к БД. таким образом - всего одно подключение на всю генерацию страницы
PM MAIL WWW   Вверх
gta4kv
Дата 17.10.2010, 20:24 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

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



Я со своим бесполезным комментарием —
Вам рано ООП.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0723 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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