![]() |
![]() ![]() |
![]() |
![]()
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 ![]() 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. -------------------- ”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335) |
|
|
![]()
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 -------------------- Nie lubię jednorożców.
|
|
|
![]()
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.. -------------------- ”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335) |
|
|
![]()
Post
#4
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
A czy w konstruktorze $native_session_id nie jest jakos inicjowane?
Bez reszty kodu trudno mi powiedziec co sie tam dzieje. -------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
A czy w konstruktorze $native_session_id nie jest jakos inicjowane? No właśnie nie. Bez reszty kodu trudno mi powiedziec co sie tam dzieje. Tu wklejam kod klasu UserSession. Na tym kodzie opiera się WidgetSession
-------------------- ”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335) |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 800 Pomógł: 0 Dołączył: 26.11.2005 Skąd: Nowy Sącz Ostrzeżenie: (0%) ![]() ![]() |
Otóż tutaj klasa pobiera native_session_id z bazy jako id porządkowe normalne, a nie id sesji. Po za tym ta klasa to już po prostu UserSession.
Nigdy tej klasy nie używałem, tylko na jej podstawie zbudowałem to co chciałem tzn. SessionHandler dla mojego Frameworka... -------------------- Jah Music Is On My Mind !
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
OT:
Ale nakombinowali, masa zapytan do bazy po kazda zmienna sesyjna. Po co to ustawianie ciastek? Po kiego grzyba jest $failed Ehh W konstruktorze masz session_start() potem jest odczytywana sesja za pomoca _session_read_method($id) i tutaj jest ustawiane $native_session_id -------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Dlatego napisałem, że czasem odnosze wrażenie, że goście nie wiedzą co piszą..
Chłopaki pytanie do Was. Czy możecie udostępnić swojego frameworka? Chcę sobie zbudować coś swojego, czyli klasy, które w każdym projekcie powtarzają mi się a nie mam za bardzo na czym się wzorować. Nie chcę też przeglądać jakiś dużych projektów bo gubie się w ilości kodu.. Zależy mi tylko na oglądnięciu.. -------------------- ”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335) |
|
|
![]()
Post
#9
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
Pouzywaj jakichs gotowych frameworkow: Zenda, Symfony, Cake czy inne. Po co od razu wzorowac sie (powstanie kolejny ZF-clone
![]() -------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 800 Pomógł: 0 Dołączył: 26.11.2005 Skąd: Nowy Sącz Ostrzeżenie: (0%) ![]() ![]() |
J4r0d: Muszę powiedzieć, że tłumacze są beznadziejni. Piszą takie bzdury. Źle tłumaczą etc. W orginalne podobno lepsza.
dr_bonzo: No tak wygodniej gotowce jednak niektórzy jak ja muszą swoje cuś napisać, ja tylko to piszę ze względu na to, że Zend nie jest gotowy. -------------------- Jah Music Is On My Mind !
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Pouzywaj jakichs gotowych frameworkow: Zenda, Symfony, Cake czy inne. Po co od razu wzorowac sie (powstanie kolejny ZF-clone ![]() Bo wiem, że to co sam napisze będzie moją zasługą i osiągne to co będę chciał. J4r0d: Muszę powiedzieć, że tłumacze są beznadziejni. Piszą takie bzdury. Źle tłumaczą etc. W orginalne podobno lepsza. Niestety jak ostatnio wszystkie książki helionu. Następna będzie z mikom.. Ta książka jest dobra jak się każdy rozdział przeczyta kilka razy - tak zrobiłem. Łapiesz o co chodzi tylko jak ją skończysz to nie wiesz jak to zastosować w praktyce. Pozatym czytając ją mógłbym wskazać, które rozdziały pisane lub łumaczone były przez innego autora/tłumacza. Sposób przekazywania myśli i wiedzy jest inny. Może to źle a może lepiej, że nie cała jest zjeb*** Ten post edytował J4r0d 8.10.2006, 15:58:58 -------------------- ”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335) |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 504 Pomógł: 2 Dołączył: 31.03.2006 Skąd: Londyn Ostrzeżenie: (0%) ![]() ![]() |
Bardzo dobry artykul autorstwa Zyxa znajduje sie tutaj. Zdecydowanie lepszy sposob zaimplementowania obslugi sesji uzytkownika. Do tego jak zwykle dodam, ze lepiej owa ksiazke czym predzej odstaw na polke i zapomnij ze ja miales. Przyklady przedstawione tam sa bezsensu, zawieraja mase bledow dla przykladu. Ksiazka ma tytul PHP5 Zaawansowane progrmowanie, a autorzy robia np tak
Moze o file_put_contents nie slyszeli. Ja po leturze tej ksiazki dowiedzialem sie jak pisac kod arcvhaiczny i malo optymalny. Polecam "Obiekty, wzorce, narzedzia" o wiele lepsza pozycja. Wracajac jednak do tematu. Zastanow sie czy w swojej aplikacji oprocz logowania, bedziesz uzywal sesji do przenoszenia jakis waznych danych. Jesli nie po co Ci osobny session handler ? To raz, dwa jak dla mnie mieszanie autoryzacji uzytkownika z handlerem sesji jest bezsensu, lepiej stworzyc dwie osobne klasy ktore moga zyc rozlacznie. Jesli natomiast bardzo chcesz pisac cos swojego, przeczytaj tutoriale usiadz i zrob, pozniej poulepszaj i bedzie good, nie ma sensu przepisywac przykladow uczacych zlych nawykow. -------------------- "Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"
![]() |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
W konstruktorze masz session_start() potem jest odczytywana sesja za pomoca _session_read_method($id) i tutaj jest ustawiane $native_session_id Możesz wskazać miejse, w którym odczytywana jest sesja za pomocą _session_read_method($id) ? Bo ja tego nie widze.. -------------------- ”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335) |
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 800 Pomógł: 0 Dołączył: 26.11.2005 Skąd: Nowy Sącz Ostrzeżenie: (0%) ![]() ![]() |
Dobra tak to wyjaśnie. Thornag w kod ingerowali tłumacze...
Co skończyło się źle. Ta książka mnie nauczyła więcej niż masa stron. Ten art Zyxa, to kolejna zła praktyka. SH dostarcza tylko obsługę sesji ! A nogdy co z tym użytkownikiem. Czy to on etc. ![]() -------------------- Jah Music Is On My Mind !
|
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 504 Pomógł: 2 Dołączył: 31.03.2006 Skąd: Londyn Ostrzeżenie: (0%) ![]() ![]() |
@Turgon, nie twierdze ze nie nauczyla ale przy okazji niezle namieszla, bede juz jej zagorzlym przeciwnikiem i kropka
![]() Co do artu Zyxa nie uwazam zeby bylo to zla praktyka, jak dla mnie SessionHandler i nazijmy to UserHandler powinny byc dwoma oddzielnymi komponentami, niech SH handluje sesje a UH korzysta z SH, nie potrzeben mi wtedy w SH metody do sprawdzania zalogowania uzytkownika czy tez logowania go. Chyba sie troche zagalopowalismy i zeszlismy z tematu, ![]() edit: ehh przetarlem oczeta. w KOD ingerowali tlumacze ? ![]() Ten post edytował thornag 11.10.2006, 15:36:12 -------------------- "Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"
![]() |
|
|
![]()
Post
#16
|
|
![]() Grupa: Zarejestrowani Postów: 800 Pomógł: 0 Dołączył: 26.11.2005 Skąd: Nowy Sącz Ostrzeżenie: (0%) ![]() ![]() |
Thornag właśnie nie wiem.... Chyba, że po polsku było.
-------------------- Jah Music Is On My Mind !
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.07.2025 - 17:21 |