Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Klasa uwierzytelnienia
eMartio
post 12.01.2006, 15:03:29
Post #1





Grupa: Zablokowani
Postów: 46
Pomógł: 0
Dołączył: 12.01.2006

Ostrzeżenie: (10%)
X----


Witam na forum smile.gif Od 2 lat programuje strukturalnie. Jednak od obecnie jestem w trakcie migracji na programowanie zorientowane obiektowo.

Czy mógłby ktoś z Szanowanych Forumowiczów pokazać mi jak stworzyć przy OOP prostą klasę uwierzytelniającą? Chodzi o to, że chciałbym, aby klasa ta sprawdzała czy user jest zalogowany, jak tak, to kontynuuje działanie aplikacji, a jak nie to ma odesłać na stronę z formularzem logowania.

Stworzyłem coś takiego:
  1. <?php
  2. class MojeUwierzytelnianie {
  3. _construct () {
  4. if ($this->czy_zalogowany()) return TRUE;
  5. }
  6.  
  7. function czy_zalgowany() {
  8. if ($_SESSION['id_user']) {
  9. return TRUE;
  10. } else {
  11. header('location: formularz_logowania.php');
  12. }
  13. }
  14. }
  15. ?>


Chyba jednak nie jest to prawidłowo skonstruowana klasa? Proszę o pomoc i radę.
Go to the top of the page
+Quote Post
bigZbig
post 12.01.2006, 15:23:13
Post #2





Grupa: Zarejestrowani
Postów: 740
Pomógł: 15
Dołączył: 23.08.2004
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Jesli chodzi o poprawnosc skladni w PHP5 to:

  1. <?php
  2. class MojeUwierzytelnianie {
  3.  
  4. public function _construct () {
  5. if ($this->czy_zalogowany()) return TRUE;
  6. }
  7.  
  8. public function czy_zalgowany() {
  9. if ($_SESSION['id_user']) {
  10. return TRUE;
  11. } else {
  12. header('location: formularz_logowania.php');
  13. }
  14. }
  15. }
  16. ?>


--------------------
bigZbig (Zbigniew Heintze) | blog.heintze.pl
Go to the top of the page
+Quote Post
NuLL
post 12.01.2006, 15:27:46
Post #3





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

Ostrzeżenie: (0%)
-----


  1. <?php
  2.  
  3. class user
  4. {
  5.     private 
  6.         $userId;
  7.     
  8.     public static function instance()
  9.     {
  10.         static 
  11.             $userObj;
  12.             
  13.         if($userObj==null)
  14.         {
  15.             $userObj=&new user();
  16.         }
  17.         
  18.         return $userObj;
  19.     }
  20.     
  21.     private function __construct()
  22.     {
  23.         $this->userId=0;
  24.     }
  25.     
  26.     public function login($login,$password)
  27.     {
  28.         //funkcja logujaca
  29.         
  30.         //tutaj sie przypisuje $this->userId;
  31.     }
  32.     
  33.     public function isLogged()
  34.     {
  35.         return intval($this->userId)>0;
  36.     }
  37.     
  38.     public function logout()
  39.     {
  40.         $this->userId=0;
  41.     }
  42. }
  43.  
  44. ?>

A moze tak ? Kazdy user ma jakis tam id ktory przypisujesz. Jesli id jest rowny zero to oznacza ze jest to gosc. Co do dwoch pierwszych method odsylam do manuala i wzorca singleton : http://pl2.php.net/manual/en/language.oop5.patterns.php


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
Martio_L
post 12.01.2006, 19:42:38
Post #4





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 2.01.2006

Ostrzeżenie: (0%)
-----


Cytat(NuLL @ 2006-01-12 14:27:46)
  1. <?php
  2.  
  3. class user
  4. {
  5. private 
  6. $userId;
  7.  
  8. public static function instance()
  9. {
  10. $userObj;
  11.  
  12. if($userObj==null)
  13. {
  14. $userObj=&new user();
  15. }
  16.  
  17. return $userObj;
  18. }
  19.  
  20. private function __construct()
  21. {
  22. $this->userId=0;
  23. }
  24.  
  25. public function login($login,$password)
  26. {
  27. //funkcja logujaca
  28.  
  29. //tutaj sie przypisuje $this->userId;
  30. }
  31.  
  32. public function isLogged()
  33. {
  34. return intval($this->userId)>0;
  35. }
  36.  
  37. public function logout()
  38. {
  39. $this->userId=0;
  40. }
  41. }
  42.  
  43. ?>

A moze tak ? Kazdy user ma jakis tam id ktory przypisujesz. Jesli id jest rowny zero to oznacza ze jest to gosc. Co do dwoch pierwszych method odsylam do manuala i wzorca singleton : http://pl2.php.net/manual/en/language.oop5.patterns.php

Dziękuję. Może mi trochę wytłumaczyć działanie tej klasy? Z tego, co na szybkiego przeanalizowałem, klasa ta nie sprawdza zmiennej sesyjnej, abym móc użyć klasy na wielu stronach?
Go to the top of the page
+Quote Post
NuLL
post 12.01.2006, 21:30:05
Post #5





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

Ostrzeżenie: (0%)
-----


Sesje tu trzeba dodac smile.gif
W systemie masz jeden egzemplarz takiej klasy reprezentujacy uzytkownika. W metodach __contruct,login,logout trzeba dodac obsluge sesji. W konstruktorze sprawdzasz czy jest moze stara sesja - jesli tak to ja zaladowac. W funkcji login tworzysz odpowiednie zmienne sesyjne w logout je czyscisz i session_destroy().


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
eMartio
post 23.01.2006, 10:38:50
Post #6





Grupa: Zablokowani
Postów: 46
Pomógł: 0
Dołączył: 12.01.2006

Ostrzeżenie: (10%)
X----


Jakie uwierzytelnienie (sprawdzenie na podstronie czy user jest zalogowany) jest najbardziej optymalne i bezpieczne?

Obiło mi się o uszy, że używanie zmiennych sesyjnych nie jest bezpieczne.

Zawsze robiłem tak:

  1. <?php
  2. if (!$_SESSION['id_usera']) { header('location: formularz.php5'); }
  3. ?>


poprawiam
---
nospor



Jak powyższą składnię wstawić do klasy NuLLa? Jak to zrobić przy modelu MVC? Konstruktor powinien odsyłać do formularza czy model czyli ta klasa?

Proszę o pomoc.
Go to the top of the page
+Quote Post
Ociu
post 23.01.2006, 15:40:24
Post #7





Grupa: Moderatorzy
Postów: 1 566
Pomógł: 37
Dołączył: 14.05.2003
Skąd: Kraków




  1. <?php
  2. public function login($login, $password) {
  3. if($login == LOGIN && $password == PASSWORD) {
  4. $this->userId = 12;
  5. }
  6. }
  7. ?>

logowanie + sprawdzanie
  1. <?php
  2. $User = user::insatnce();
  3. $User->login('ociu', 'password');
  4. if(!$User->isLogged) header('Location: form.php');
  5. ?>
Go to the top of the page
+Quote Post
splatch
post 23.01.2006, 21:35:40
Post #8





Grupa: Zarejestrowani
Postów: 487
Pomógł: 7
Dołączył: 7.01.2004
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


@NuLL odesłałeś do manuala a sam nie użyłeś pola statycznego, które w przykładzie na php.net jest winksmiley.jpg
  1. <?php
  2. class user {
  3. private $userId;
  4.  
  5. // po co sa pola statyczne w PHP5?
  6. static protected $userObj;
  7.  
  8. public static function instance() {
  9. if(self::$userObj==null) {
  10. self::$userObj = new self;
  11. }
  12. return self::$userObj;
  13. }
  14.  // ...
  15. }
  16. ?>


--------------------
Łukasz Dywicki
Independent Java and open source software consultant.
Blog - Java, OSGi, integracja oprogramowania..
Go to the top of the page
+Quote Post
eMartio
post 24.01.2006, 15:28:12
Post #9





Grupa: Zablokowani
Postów: 46
Pomógł: 0
Dołączył: 12.01.2006

Ostrzeżenie: (10%)
X----


OK. Dzięki. To tylko ostatnia kwestia. Czy uwierzytelnianie oparte na sesjach standardowych jest bezpieczne? Czy lepiej oprzeć to o własną obsługę sesji zapisywaną w bazie danych?
Go to the top of the page
+Quote Post
sf
post 24.01.2006, 15:37:08
Post #10





Grupa: Zarejestrowani
Postów: 1 597
Pomógł: 30
Dołączył: 19.02.2003
Skąd: Tychy

Ostrzeżenie: (0%)
-----


Cytat(eMartio @ 2006-01-24 15:28:12)
OK. Dzięki. To tylko ostatnia kwestia. Czy uwierzytelnianie oparte na sesjach standardowych jest bezpieczne? Czy lepiej oprzeć to o własną obsługę sesji zapisywaną w bazie danych?

Wydaje mi sie, ze jest o ile nie ma dostepu do Twoich plikow sesyjnych inny uzytkownik.

Ten post edytował sf 24.01.2006, 15:37:32


--------------------
Zapraszam na mój php blog, tworzenie stron.
Go to the top of the page
+Quote Post
UDAT
post 1.10.2006, 10:27:21
Post #11





Grupa: Zarejestrowani
Postów: 442
Pomógł: 0
Dołączył: 27.12.2005

Ostrzeżenie: (0%)
-----


@szczurek
Czytaj przykłady.

  1. <?php
  2. $User = user::insatnce();
  3. $User->login('ociu', 'password');
  4. if(!$User->isLogged) header('Location: form.php');
  5. ?>


Tak tego się używa, bo to jest Singleton.
Go to the top of the page
+Quote Post
szczurek
post 1.10.2006, 11:04:43
Post #12





Grupa: Zarejestrowani
Postów: 59
Pomógł: 0
Dołączył: 1.10.2006
Skąd: Bydgoszcz

Ostrzeżenie: (10%)
X----


Tak, dzięki. Przeczytałem to jeszcze raz dlatego wykasowałem swój post.


--------------------
"Nie masz żadnej szansy, ale ją wykorzystaj" Arthur Schopenhauer
wiersze
Go to the top of the page
+Quote Post
Turgon
post 2.10.2006, 15:41:30
Post #13





Grupa: Zarejestrowani
Postów: 800
Pomógł: 0
Dołączył: 26.11.2005
Skąd: Nowy Sącz

Ostrzeżenie: (0%)
-----


sf każdy ma dostęp do katalogu /tmp, a tam trzymane są dane sesji. Moje info opieram na PHP5 Zaawansowane Programowanie.


--------------------
Jah Music Is On My Mind !
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 23.06.2025 - 09:15