WebDeveloper
 g³ówna | forum manual | skrypty |  artyku³y |  projekty | porady |  zasoby |  linki 
dzia³y
  •  manual PHP
  •  skrypty PHP
  •  artyku³y
  •  projekty
  •  porady
  •  zasoby
  •  linki
  •  
    forum
  •  php
  •  apache
  •  mysql
  •  postgresql
  •  faq php
  •  pomocnik php
  •  
    news
  • Porcjowanie wyników zapytania
  • Kartki Internetowe
  • PHP + MySQL + Windows 98
  • Bezpieczne uploadowanie plików
  • Przegl±danie obrazków z bazy PostgreSql.
  • Co to jest WebDeveloper?
  • Instalujemy serwer baz danych !
  • Sesje w PHP4 !
  • Dodaj poradê !!!
  • Zastosowano... PHP !
  • redakcja

    Je¶li masz ciekawe informacje odno¶nie PHP, skrypty, porady, linki itp. lub chcia³by¶ wspó³tworzyæ serwis PHP.zone.pl daj nam znaæ na email !



    dodaj poradê !


    Powered by:
    PHP
    Apache
    MySql
    Linux

    users online: 8

    Artyku³y

    Obs³uga sesji w PHP 4.0 (2)
    autor: Hubert Mierzwiak

    Druga czê¶æ artyku³u opisuj±cego mechanizmy zarz±dzania sesj± z poziomu jêzyka PHP.

    Modu³y przechowywania danych

    Do odczytu i zapisu danych sesji, PHP u¿ywa modu³ów przechowywania danych. Obecnie s± dostêpne trzy modu³y:
    - plikowy. domy¶lny, PHP zapisuje dane sesji na dysku (domy¶lnie w katalogu /tmp w Unix), tworz±c pliki tekstowe o nazwach identycznych jak identyfikatory sesji.
    - mm. Je¶li potrzebujesz wiêkszej wydajno¶ci, modu³ mm daje Ci takie mo¿liwo¶ci. Dane sesji s± zapisywane w pamiêci dzielonej.
    - u¿ytkownika. U¿ywany wewnêtrznie do realizacji odwo³añ do funkcji, które zdefiniowano w session_set_save_handler().

    Prawdziwa moc tkwi w module u¿ytkownika, poniewa¿ umo¿liwia pisanie w³asnych funkcji do obs³ugi sesji, które wci±¿ bêd± bazowaæ na ujednoliconym API jêzyka PHP; mo¿esz zapisywaæ sesje jak chcesz i gdzie chcesz; w bazie danych np. MySql, plikach XML, DBF, na zdalnym serwerze FTP.
    Aby skonfigurowaæ uchwyt do zapisu sesji bêdziemy potrzebowaæ funkcji session_set_save_handler(), która korzysta z sze¶ciu argumentów (³añcuchów znakowych) które musz± byæ wywo³aniami funkcji.

    Sk³adnia funkcji jest nastêpuj±ca:

    void session_set_save_handler(string open, string close, string read, string write, string destroy, string gc);

    Uwaga: Aby opu¶ciæ jeden z argumentów, wstaw pusty string ("") do session_set_save_handler().


    Funkcje s± definiowane nastêpuj±co:

    bool open (string save_path, string sess_name);

    Funkcja jest wywo³ywana podczas inicjalizacji sesji; powiniene¶ jej u¿yæ do przygotowania swoich funkcji, do inicjalizacji zmiennych itp. Funkcja pobiera dwa argumenty. Pierwszy to ¶cie¿ka gdzie sesja powinna byæ zapisana. Ta zmienna mo¿e byæ okre¶lona w php.ini lub przez funkcjê session_save_path().Drugi argument to nazwa sesji, domy¶lnie PHPSESSID. Funkcja zwraca true je¶li jej wykonanie siê powiedzie (istnieje ¶cie¿ka i nazwa sesji), lub false przy b³êdzie.

    bool close ();

    Ta funkcja jest wykonywana przy zamykaniu sesji. U¿ywana do zwalniania pamiêci lub kasowania zmiennych. Nie pobiera argumentów i zwraca true po zamkniêciu sesji lub false gdy nast±pi b³±d.

    mixed read (string sess_id, );

    Ta wa¿na funkcja jest wywo³ywana za ka¿dym razem gdy uruchamiana jest sesja. Musi ona odczytaæ dane z sesji identyfikowanej przez sess_id a zwraca uszeregowany ³añcuch znaków (string). Je¶li nie istnieje sesja z podanym ID, zwracany jest pusty ³añcuch. Je¶li podczas wywo³ania tej funkcji wyst±pi b³±d zwracane jest false.

    bool write (string sess_id, , string value);

    Ta funkcja jest wywo³ywana w momencie gdy sesjê nale¿y zapisaæ. Pierwszy argument to session ID; drugi to uszeregowane zmienne sesji. Funkcja zwraca true je¶li siê zapis siê powiedzie, w innym przypadku false.

    bool destroy (string sess_id, );

    Ta funkcja jest wywo³ywana gdy u¿ywamy funkcji session_destroy() w kodzie PHP. Kasuje ona wszystkie dane zwi±zane z podanym sess_id i zwraca true gdy kasowanie siê powiedzie lub false gdy wyst±pi b³±d.

    bool gc (int max_lifetime, );

    Ta funkcja jest wywo³ywana je¶li sesja startuje z okre¶lonym parametrem gc_probability. S³u¿y ona usuwaniu starych sesji; usuwa sesje które nie zosta³y uaktualnione w ci±gu gc_maxlifetime sekund. Zwraca true lub false.

    Je¶li chcieliby¶my skonfigurowaæ nasz w³asny modu³ przechowywania sesji, za³ó¿my w bazie MySql, musimy dostarczyæ PHP implementacji podobnych funkcji. Prototypy takich funkcji powinny wygl±daæ mniej wiêcej tak:

    function sess_open($save_path, $sess_name)
    {
    }

    function sess_read($sess_id)
    {
    }

    function sess_write($sess_id, $val)
    {
    }

    function sess_destroy($sess_id)
    {
    }

    function sess_gc($max_lifetime)
    {
    }

    Aby zarejestrowaæ te funkcje musimy u¿yæ session_set_save_handler():

    session_set_save_handler("sess_open", "", "sess_read", "sess_write", "sess_destroy", "sess_gc");


    Przekazywanie identyfikatora sesji

    PHP4 wspiera nastêpuj±ce metody przekazywania identyfikatora sesji:
    - Cookies (domy¶lnie)
    - GET/POST
    - Umieszczanie session ID w URL'u (rêcznie/automatyczne)

    Cookie s± domy¶lnym sposobem przekazywania identyfikatora sesji pomiêdzy stronami. Innym sposobem przekazywania ID s± metody GET/POST. Twój URL wygl±da wtedy tak: script.php?<session-name>=<session-id>. Mo¿esz tworzyæ podobne URL u¿ywaj±c globalnego, sta³ego SID:

    printf('<a href="script.php?%s">Link</a>', SID);

    Automatyczne przepisywanie URL'a to jedna z nowych mo¿liwo¶ci PHP 4, pozwalaj±ca dodawaæ session ID do wszystkich linków na witrynie. Aby w³±czyæ tê mo¿liwo¶æ musimy skompilowaæ PHP z opcj± --enable-trans-id. Od tej chwili identyfikator sesji bêdzie dodawany do wszystkich URL'i do stron napisanych w PHP. Oczywi¶cie przepisywanie URL'a znacznie obci±¿a serwer. Cookie s± za¶ ustawiane tylko raz nie powoduj±c przepisywania URL'a.


    Przyk³ady

    Plik z opisanym poni¿ej przyk³adem znajduje siê pod adresem:
    http://php.zone.pl/misc/sessions.zip

    Przyk³ad zawiera prost± grê znanej pod nazw± wisielec, na której mo¿na pokazaæ przechowywanie zmiennych. Podczas gry komputer wybiera przypadkowe piêcioliterowe s³owo, a graj±cy musi je odgadn±æ litera po literze. Graj±cy ma tylko sze¶æ prób po których je¶li nie odgadnie has³a wisielec zawisa na szubienicy. S³owa do odgadniêcia znajduj± siê w pliku words.txt i mog± zawieraæ dowolne wyrazy. Pamiêtaj, ¿e ka¿dy wyraz musi znajdowaæ siê w oddzielnej linii. Oczywi¶cie, gra nie mo¿e dzia³aæ bez przechowywania informacji o swoim stanie. Gracz nie mog³by wygraæ je¶li nie odgad³by ca³ego s³owa przy pierwszej próbie. Aby gra mog³a poprawnie dzia³aæ, potrzebujemy trzech zmiennych, które pamiêtaj± warto¶ci zmiennych pomiêdzy kolejnymi zapytaniami.
    S± to:
    . s³owo, które gracz próbuje zgadn±æ.
    . litery, które gracz ju¿ poda³.
    . ilo¶æ prób zakoñczonych nie odgadniêciem s³owa.

    Przyk³ad u¿ywa domy¶lnej metody przekazywania identyfikatora sesji czyli cookie, za¶ zasada dzia³ania wygl±da tak:
    . rejestrowane s± trzy zmienne.
    . skrypt sprawdza czy formularz zosta³ wys³any metod± Post, co oznacza, ¿e gracz poda³ jaki¶ znak.
    . je¶li tak, skrypt przyjmuje nowy znak, uaktualnia stan gry (wygra³e¶, przegra³e¶, pasuj±ca litera, nie pasuj±ca litera) i wy¶wietla odpowiedni komunikat.
    . je¶li nie, uruchamiana jest nowa gra, pobierane jest przypadkowe s³owo z pliku words.txt.
    . ³añcuch, który ukrywa jeszcze nie odgadniête litery w szukanym s³owie jest tworzony i wy¶wietlany w przegl±darce.
    . reszta strony pozostaje bez zmian.

    Wygl±d strony HTML jest konfigurowany przez oddzieln± klasê. W ten sposób oddzielamy kod programu od opisu wygl±du.



    na podstawie:
    "Session Handling with PHP 4.0" Tobias Ratschiller





    komentarze | artyku³y






    kontakt

    autor:

    Hubert Mierzwiak

    wspó³praca:

    Piotr Karolak

    Chcesz prowadziæ swój dzia³ tematyczny typu XML, SQL, admin, JavaScript, itp?
    Napisz do nas !
     
    skrypty
  • designer.zip
  • vipAuth.tgz
  • phpCenzura.tgz
  • vip_php.tgz
  • pomocnik_light
  • ankieta
    Co s±dzisz o stworzeniu FAQ PHP?
    super!
    po co?

    poprzednie

    newsletter

    wpisz swój email i wci¶nij Enter

    linuxnews.pl
  • KRRiTV stra¿nikiem!?
  • Dzisiejsze zebranie...
  • Felieton w warunkach ekstremalnych
  • Nexidion Designer
  • Solaris OpenSource
  • KDE 2.0.1
  • Jest ju¿ nowy Debian...
  • Tydzieñ min±³...




  • Manual | Skrypty | Artyku³y | Projekty
    Porady | Zasoby | Linki
    G³ówna | Forum

    Copyright 2000 Hubert Mierzwiak