Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]Logowanie + Rejestracja.
Forum PHP.pl > Forum > Przedszkole
K4mil94
Witam!. Chcę w końcu napisać porządny skrypt rejestracji. Dotychczas używałem parę if'ów tak aby po dobrym przejściu weryfikacji wykonało zapytanie. Co do logowania, używałem również tylko if'ów mysql_fetch_array i tyle byle dojść do utworzenia sesji. Proszę o jakieś dobre porady aby napisać te skrypty porządnie smile.gif Z góry dzieki smile.gif
Foxx
Np. taka porada: skorzystaj z wyszukiwarki forum i znajdziesz kilkaset postów o logowaniu, jest w nich wszystko co można na ten temat powiedzieć czarodziej.gif
ikssde
Napisz sobie klasę do obsługi tego wszystkiego o czym powiedziałeś. Zresztą tak jak Foxx już powiedział, na tym forum jest wiele postów odnośnie tego zagadnienia.
Fifi209
K4mil94 a ja Ci powiem, że chętnie się dołączę (o ile oczywiście Wać Pan pozwoli). ;p
Zawsze chciałem napisać coś lepszego, po czym brałem się do pracy i tak ciągle powstawało coś nowego. Teraz chciałbym na prawdę coś PRO napisać. ;d Odezwij się na pw jak coś. haha.gif
InosU31
Witam

ja tez pisze narazie na if'ach;-) ktos na tym forum napisal ze niewazne jak napiszesz skrypt czy oparty na clasach czy tylko na samych instrukcjach wazne zeby dzialalo.

mysle ze jak chcesz bardziej "profesionalnie" to napisac - tez sam sie bede niedlugo przymierzal do "profesjonalniejszego" zapisu - to pewnie bedziesz musial uzyc:

klas
funkcji
sesji
zabezpieczenia hasel
baza danych mysql


ale ja narazie sie ucze wiec chetnie tez poslucham opinii innych;-)
pozdrawiam
Fifi209
Cytat(InosU31 @ 29.03.2009, 22:47:35 ) *
Witam

ja tez pisze narazie na if'ach;-) ktos na tym forum napisal ze niewazne jak napiszesz skrypt czy oparty na clasach czy tylko na samych instrukcjach wazne zeby dzialalo.

mysle ze jak chcesz bardziej "profesionalnie" to napisac - tez sam sie bede niedlugo przymierzal do "profesjonalniejszego" zapisu - to pewnie bedziesz musial uzyc:

klas
funkcji
sesji
zabezpieczenia hasel
baza danych mysql
ale ja narazie sie ucze wiec chetnie tez poslucham opinii innych;-)
pozdrawiam


Tak szczerze to nie widziałem jeszcze systemu, który na w/w elementach nie byłby oparty (przynajmniej żaden z moich haha.gif)

Poza tym wyobraź sobie trzymanie userów np. jako pliki tekstowe... no bez jaj. haha.gif
K4mil94
nom, ja tylko w mysql, i ify no i sesje i md5 oczywiscie. wczesniej mialem skrypt na funkcjach
ikssde
Pisanie na klasach ma przyszłość i metoda/styl nie pozostaje bez znaczenia. Także sugeruje wam napisanie czegoś takiego w oparciu o klasy, przede wszystkim ze względu na wygodę użytkowania i późniejszej konserwacji.

Jeżeli chodzi o schemat działania, to polecam sesje i tu dzięki klasom macie nieograniczone pole działania. Piszecie sobie funkcje odpowiedzialną za filtrowanie danych, tworzenie sesji, odczytywanie z bazy, itp. Tak to powinno pracować.
Fifi209
Cytat(K4mil94 @ 29.03.2009, 22:52:27 ) *
nom, ja tylko w mysql, i ify no i sesje i md5 oczywiscie. wczesniej mialem skrypt na funkcjach


Jest już dużo słowników md5, moim zdaniem lepiej używać sha1 lub rsa.
Najlepiej pracuje się w OOP, gdyż wszystkie dane masz zhermetyzowane i taka klasa jest łatwo rozszerzalna o nowe metody.

@edit
Pan Up mnie uprzedził z tymi klasami. ;d

@up
Też uważam, że stworzenie własnego session handlera to dobry pomysł. winksmiley.jpg (przynajmniej, jeżeli chodzi o jakość zabezpieczeń)
InosU31
Cytat(fifi209 @ 29.03.2009, 21:50:50 ) *
Tak szczerze to nie widziałem jeszcze systemu, który na w/w elementach nie byłby oparty (przynajmniej żaden z moich haha.gif)

Poza tym wyobraź sobie trzymanie userów np. jako pliki tekstowe... no bez jaj. haha.gif



chodzilo mi raczej o to :

mam taki skrypt
  1. <?php
  2.  
  3. include_once "common/func_form.php";
  4. include_once "common/connect.php";
  5.    
  6.    if (!isset($_POST['login'])&&(!isset($_POST['haslo'])))
  7.    {
  8.        formReg("Aby sie zarejestrowac musisz wypelnic ponizszy formularz<br>");
  9.        exit();
  10.    }
  11.    else
  12.    {    
  13.    $register_login = $_POST['login'];
  14.    $register_passwd = $_POST['haslo'];
  15.        
  16.        if (!is_numeric($register_login) and (!empty($register_login)) && (!empty($register_passwd) and $register_passwd !== NULL ))
  17.        {
  18.            if ((strlen($register_login) >= 4) && (strlen($register_passwd) >= 5))
  19.            {
  20.            $register_passwd = sha1($register_passwd);
  21.            $sql_select = mysql_query ("SELECT * FROM users_session WHERE user_login = '$register_login' and user_password = '$register_passwd'") or die ("nie znaleziono takiego usera");    
  22.            
  23.            if (mysql_num_rows($sql_select) == 0)
  24.            {
  25.            $sql_select = mysql_query("
  26.            INSERT INTO users_session (user_login, user_password)
  27.            VALUES ('$register_login', '$register_passwd')
  28.            ");    
  29.            echo "dodano usera";
  30.            }
  31.            else
  32.                {
  33.                formReg("Taki uzytkownik juz istnieje!<br>");
  34.                exit();
  35.                }
  36.            }
  37.            else
  38.            {    
  39.            if ((strlen($register_login) >= 4) && (strlen($register_passwd) < 5))
  40.            {
  41.            echo formReg("haslo jest za krotkie");
  42.            exit();
  43.            }
  44.            else if ((strlen($register_login) < 4) && (strlen($register_passwd) >= 5))
  45.            {
  46.            formReg("login jest za krotki");
  47.            exit();
  48.            }
  49.            formReg("haslo i login sa za krotkie");
  50.            }    
  51.        }
  52.        
  53.        if (is_numeric($register_login) or (is_numeric($register_passwd)))
  54.        {
  55.            formReg("NIE MOZNA WPISYWAC LICZB<br>");    
  56.        }
  57.        //else
  58.        if (empty($register_login) || (empty($register_passwd)))
  59.        {
  60.            if (empty($register_login) && (empty($register_passwd)))
  61.            {
  62.            formReg("FORMULARZ NIE MOZE BYC PUSTY<br>");
  63.            }
  64.            else
  65.            {
  66.            formReg("MUSZA BYC WYPELNIONE OBA POLA<br>");
  67.            }        
  68.        }
  69.    
  70.    }
  71.  
  72.  
  73. ?>



a chce go przerobic na funkcje i klasy ;-) zle mnie zrozumiales ;_) Pozatym nie wiem jak moze byc to profesjonalniej questionmark.gif K4mil94 tobie o kalsy chodzi czy cos innego questionmark.gif

pozdrawiam
K4mil94
o funkcje, masz np. plik fukncje.php a w nim wszystko potem require i wywołujesz funkcje.
Fifi209
O boże! Masa kodu. ;d

Ja mam taki kawałek kodu ze starego systemu:

  1. <?php
  2. class security {
  3.        
  4.        static public function isLogin() {
  5.            if ($_SESSION['login'] == TRUE) {
  6.                if ($_SESSION['ip'] === $_SERVER['REMOTE_ADDR']) {
  7.                    return TRUE;
  8.                }else{
  9.                error::save('Błąd! Próba przejęcia sesji!', ERR_CRITICAL);
  10.                return FALSE;
  11.                }
  12.            }else{
  13.                return FALSE;
  14.            }
  15.        }
  16.        
  17.        static public function getInfo() {
  18.            if (self::isLogin() == TRUE) {
  19.                return $info = array('id' => $_SESSION['id'], 'name' => $_SESSION['name'], 'access' => $_SESSION['access']);
  20.            }else{
  21.                error::save('Nie jesteś zalogowany!', ERR_NORMAL);
  22.                return FALSE;
  23.            }
  24.        }
  25.        
  26.        static public function login($user, $pass) {
  27.            if (self::isLogin() != TRUE) {
  28.                $user = self::nohack($user);
  29.                $pass = sha1($pass);
  30.                $sql = mysql::select('*', 'users', 'WHERE `name` = "'.$user.'" LIMIT 1');
  31.                if ($sql[0]['password'] == $pass) {
  32.                    $_SESSION['login'] = TRUE;
  33.                    $_SESSION['id'] = $sql[0]['id'];
  34.                    $_SESSION['name'] = $sql[0]['name'];
  35.                    $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
  36.                    return TRUE;
  37.                }else{
  38.                    return FALSE;
  39.                }
  40.            }else{
  41.                return TRUE;
  42.            }
  43.        }
  44.                
  45.        static public function logout() {
  46.            if (self::isLogin() == TRUE) {
  47.                unset($_SESSION);
  48.                session_destroy();
  49.                return TRUE;
  50.            }else{
  51.                error::save('Nie jesteś zalogowany!', ERR_NORMAL);
  52.                return FALSE;
  53.            }
  54.        }
  55.        
  56.        static public function nohack($string) {
  57.            $string = mysql_real_escape_string($string);
  58.            //$string = htmlspecialchars($string);
  59.            return $string;
  60.        }
  61.        
  62.  
  63.    }
  64. ?>
ikssde
Przykładowa klasa :

  1. <?php
  2. class auth {
  3.  
  4.  private $user;
  5.  private $password;
  6.  
  7.  private function filter($input)
  8.  {
  9.  ... filtrowanie danych...
  10.  }
  11.  
  12.  public function login()
  13.  {
  14.  $this->user = $this->filter($_POST['user']);
  15.  $this->password = $this->filter($_POST['password']);
  16.  ... sprawdzanie czy taki jest ... logowanie ...
  17.  }
  18.  
  19.  public function logout()
  20.  {
  21.  ...wylogowywanie...
  22.  }
  23. ?>
K4mil94
na klasach jeszcze nie potrafie dobrze operowac ;] bedzie trzba w manual zajrzec.
Fifi209
Cytat(K4mil94 @ 29.03.2009, 23:06:17 ) *
na klasach jeszcze nie potrafie dobrze operowac ;] bedzie trzba w manual zajrzec.


Masz okazję się nauczyć. ;d
Ja bez OOP nie wyobrażam sobie programowania. ;d Czasami piszę nawet małą klasę z jedną, dwoma metodami z czasem rozrastają się np. do 30-50 metod. a wszystko szybko i sprawnie.
InosU31
Cytat(fifi209 @ 29.03.2009, 22:02:55 ) *
O boże! Masa kodu. ;d



ja dopiero sie ucze a za klasy wezme jak uporam z do konca z sesjami, instrukcjami, i funkcjami;-)

Pozdrawiam


a co to OOP??
K4mil94
sesje, indtrukcje, funkcje - to jest dla mnie teraz banał. klasy już będą trudniejsze.
Fifi209
Zapraszam: (Ci chętni wiedzy) haha.gif

OOP
InosU31
Cytat(fifi209 @ 29.03.2009, 22:24:40 ) *
Zapraszam: (Ci chętni wiedzy) haha.gif

OOP

hehe no to juz juz wiem;-)
piotrooo89
kurcze mówicie PRO. a teraz zdefiniujcie to proszę. czy pro jest to że ktoś pisze jakiś skrypt w OOP? ten skrypt jeśli ktoś nie będzie się znał na rzeczy może być równie podatny na ataki jak i skrypt napisany strukturalnie. dla jednego pro jest napisane czegoś strukturalnie i zabezpieczenie wszystkiego wszelkimi dostępnymi metodami. dla innego napisanie prostej klasy do autoryzacji która ma masę luk. a kto inny po prostu skorzysta z jakiegoś frameworka np. ZENDA i też będzie pro. każdy robi jak lubi. nie chce się tu zagłębiać w przewagę OOP na zwykłym, ale tak jak napisałem dla jednego PRO nie musi oznaczać tego samego dla innego.
K4mil94
Myślę że OOP będzie do tego dobre. Oczywiście tak jak mówisz z dobrymi zabezpieczeniami.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.