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