![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Moje pytanie skierowane jest głównie do osób, które czytały książkę "PHP5 zaawansowane programowanie",
ponieważ problem dotyczy przykładu tam przedstawionego. W rozdziale 15 autor przedstawił klasę do obsługi własnych sesji a w rozdziale 22 wdraża ją do użytku. Na stronie 457 przedstawiony jest sposób logowania, który moim zdaniem jest całkowicie bez sensu. Przytoczę tutaj główny kod:
Mniej więcej tak to wygląda. Nie będę podawał kodu klasy bo za dużo pisania. Zresztą nie chodzi mi o sposób napisania klasy. Wywoływany jest skrypt index.php, który sprawdza czy przesłano parametr action=login. Jeżeli tak to znaczy, że dokonano próby logowania (wypełniono formularz i go wysłano), metoda sprawdza dane w bazie - jeżeli się zgadzają ustawia właściwość prywatną klasy logged_in na true. Następnie metoda isLoggedIn() sprawdza czy wartość właściwości logged_in ma wartość true - jeśli tak uznaje, że użytkownik się zalogował i ma dostęp do super tajnych danych (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Wszyscy wiemy, że protokół HTTP jest bezstanowy. Więc możemy sobie w jednym skrypcie utworzyć 100 obiektów, ale jak przejdziemy do drugiego skrytpu (czyli zacznie być wykonywany inny skrypt) to te nasze 100 obiektów poszło się jeb**. Wiecie do czego zmierzam? Do tego, że stosując metodę autora po oddaniu sterownia do drugiego skryptu będziemy musieli utworzyć od nowa obiekt, który będzie miał właściwość logged_in=false (bezstanowość protokołu - zgubiliśmy dane, że użytkownik jest zalogowany) co wymusza przekierowanie na stronę logowania.. Nie odpalałem całego kodu bo nie chce mi się klepać z książki.. Ale uważam, że jeśli dodamy sprawdzanie w każdym skrypcie czy użytkownik jest zalogowany to ten sposób nie zadziała. A trzeba sprawdzać czy użytkownik jest zalogowany, że sprytny user zamiast wpisać www.testowa.pl nie wpisał www.testowa.pl/tajnedane.php i w ten sposób pominął ekran logowania. Co o tym myślicie? Bo ja czasem czytająć tą książke miałem wrażenie, że autorzy nie wiedzą co piszą albo piszą kod od niechcenia. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
A reszta kodu?
Przeciez $session->login(...) probuje zalogowac usera i zapewne zapisuje w sesji ($_SESSION) wartosc wskazujaca czy user jest zalogowany. I przy wyswietlaniu nastepnej strony, sesja jest inicjowana i ta wartosc jest zachowana i nadal wskazuje czy user jest zalogowany. Przenosze na php |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
A reszta kodu? Nie chce mi się stukać wszystkiego. Dlatego podałem strony w książce. Przeciez $session->login(...) probuje zalogowac usera i zapewne zapisuje w sesji ($_SESSION) wartosc wskazujaca czy user jest zalogowany. Zapisuje sesje w bazie danych. I przy wyswietlaniu nastepnej strony, sesja jest inicjowana i ta wartosc jest zachowana i nadal wskazuje czy user jest zalogowany. Na następnej stronie autor powiela kod:
A metoda Impress() wygląda tak:
I tyle poczynił, żeby sprawdzić sesje, tylko próbuje ją aktualizować. A skoro w nowym skrypcie utworzył nowy obiekt "WidgetSession" to normalne jest że native_session_id będzie miała wartość false, więć metoda Impress() nie zostanie wykonana. Nie ma weryfikacji użytkownika, tylko update sesjii w bazie.. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 14.10.2025 - 00:37 |