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

    XLIX. Funkcje zarz±dzania sesj±

    Obs³uga sesji w jêzyku PHP to sposób na przechowywanie danych definiowanych podczas odwiedzin witryny przez u¿ytkownika.

    Wsparcie dla sesji w PHP4 jest zbli¿one do zarz±dzania sesj± u¿ytym w PHPLIB.

    U¿ytkownikowi odwiedzaj±cemu witrynê zostaje przyznany unikalny identyfikator zwany identyfikatorem sesji (session id). Jest on zapisywany w cookie i wysy³any do u¿ytkownika lub umieszczany w URL'u.

    Obs³uga sesji umo¿liwia rejestrowanie wielu danych (zmiennych) pozyskiwanych z zapytañ HTTP . Kiedy wizytuj±cy odwiedza witrynê, PHP automatycznie (je¿eli session.auto_start ma warto¶æ 1) lub gdy tego za¿±dasz (wywo³uj±c funkcjê session_start() lub session_register()) sprawdza czy w zapytaniu zosta³ umieszczony identyfikator sesji. Je¶li jest, to poprzednie zmienne zostaj± zast±pione nowymi zawartymi w zapytaniu.

    Wszystkie zarejestrowane zmienne s± zapisywane w sesji. Zarejestrowane zmienne które nie zosta³y zdefiniowane s± zaznaczane jako niezdefiniowane. Przy kolejnych odwiedzinach zmienne te utrzymuj± swoj± warto¶æ, chyba ¿e u¿ytkownik zdefiniuje inn± warto¶æ podczas kolejnych wizyt.

    Opcje konfiguracji track_vars i gpc_globals maj± wp³yw na sposób przywracania zmiennych sesji. Je¶li w³±czona jest opcja track_vars, zmienne sesji po przywróceniu bêd± dostêpne w globalnej tablicy $HTTP_STATE_VARS. Je¶li w³±czona jest opcja gpc_globals, zmienne po przywróceniu sesji bêd± dostêpne jako zmienne globalne. Je¶li obie opcje s± w³±czone, to zarówno zmienne globalne jak i tablica $HTTP_STATE_VARS zawieraj± te same warto¶ci.

    Istniej± dwie metody rozpowszechniania identyfikatora sesji:

    • Cookies
    • Parametr URL'a

    Modu³ sesji wspiera obydwie metody. Cookies to metoda optymalna, ale nie jest pewna (klient (przegl±darka) mo¿e nie akceptowaæ cookie), wiêc nie mo¿emy na niej polegaæ. Drugi sposób to umieszczanie identyfikatorów bezpo¶rednio w URL'ach. Metodê tê PHP obs³uguje w sposób przezroczysty je¿eli zosta³o skompilowane z opcj± --enable-trans-sid i zmienia ka¿dy wzglêdny URI tak aby automatycznie zawiera³ identyfikator sesji. Wzglêdnie, mo¿esz u¿yæ sta³ego, wcze¶niej okre¶lonego SID, je¿eli klient nie przys³a³ poprawnego cookie (wa¿nego SID). SID ma postaæ session_name=session_id lub jest pustym ³añcuchem znaków.

    Poni¿szy przyk³ad demonstruje rejestrowanie zmiennej i sposób stosowania SID'a w odno¶niku.

    Przyk³ad 1. Zliczanie liczby odwiedzin dla pojedyñczego u¿ytkownika

    <?php
    
    session_register("licznik");
    
    $licznik++;
    
    ?>
    
    Witaj, nasza witryne odwiedziles juz <? echo $licznik; ?> razy.<p>
    
    <?
    # <?=SID?> jest konieczny do przechowania identyfikatora sesji
    # je¶li u¿ytkownik nie u¿ywa cookies
    ?>
    
     Aby kontynuowac, <A HREF="nastepna.php?<?=SID?>">kliknij !</A>

    Aby przechowywaæ sesje w bazie danych potrzebna bêdzie funkcja session_set_save_handler(). Aby u¿ywaæ wspomnianej funkcji do obs³ugi bazy MySql lub innej powiniene¶ rozbudowaæ nastêpuj±ce funkcje.

    Przyk³ad 2. U¿ycie session_set_save_handler()

    <?php
    
    function open ($save_path, $session_name) {
        echo "open ($save_path, $session_name)\n";
        return true;
    }
    
    function close () {
        echo "close\n";
        return true;
    }
    
    function read ($key) {
        echo "write ($key, $val)\n";
        return "foo|i:1;";
    }
    
    function write ($key, $val) {
        echo "write ($key, $val)\n";
        return true;
    }
    
    function destroy ($key)
        return true;
    }
    
    function gc ($maxlifetime) {
        return true;
    }
    
    session_set_save_handler ("open", "close", "read", "write", "destroy", "gc");
    
    session_start ();
    
    $foo++;
    
    ?>
         

    Powy¿szy przyk³ad wygeneruje poni¿sze:

    $ ./php save_handler.php
    Content-Type: text/html
    Set-cookie: PHPSESSID=f08b925af0ecb52bdd2de97d95cdbe6b
    
    open (/tmp, PHPSESSID)
    read (f08b925af0ecb52bdd2de97d95cdbe6b)
    write (f08b925af0ecb52bdd2de97d95cdbe6b, foo|i:2;)
    close
        

    <?=SID?> nie jest konieczny, je¶li PHP zosta³o skompliowane z opcj± --enable-trans-sid (w³±czony transparent session ID).

    System zarz±dzania sesj± jest konfigurowany wieloma opcjami umieszczonymi w php.ini. Oto ich krótki przegl±d:

    • session.save_handler definiuje nazwê uchwytu, który bêdzie u¿ywany do zapisu i odczytu danych skojarzonych z sesj±. Domy¶lnie s± to pliki.
    • session.save_path definiuje argument, który jest przesy³any do uchwytu aby go zapisaæ. Je¶li wybierzesz domy¶lny uchwyt plikowy, argumentem jest ¶cie¿ka katalogu gdzie bêd± umieszczane pliki. Domy¶lnie /tmp.
    • session.name okre¶la nazwê sesji, która jest u¿yta jako nazwa cookie. Nazwa powinna zawieraæ tylko znaki alfanumeryczne. Domy¶lnie PHPSESSID.
    • session.auto_start okre¶la czy modu³ sesji uruchamia automatycznie sesjê w chwili nadej¶cia zapytania. Domy¶lnie 0 (wy³±czone).
    • session.lifetime okre¶la czas "¿ycia" cookie (w sekundach) przesy³anej do przegl±darki. Warto¶æ 0 oznacza "do zamkniêcia okna przegl±darki". Domy¶lnie 0.
    • session.serialize_handler definiuje nazwê uchwytu, który jest u¿ywany do szeregowania danych. Obecnie wspierany jest wewnêtrzny format PHP (nazwa: php) i WDDX (nazwa: wddx). WDDX jest dostêpne tylko je¶li PHP jest skompilowane ze wsparciem dla WDDX. Domy¶lnie php.
    • session.gc_probability okre¶la prawdopodobieñstwo (w %), ¿e procedury czyszczenia starych sesji (garbage collection) startuj± przy ka¿dym zapytaniu. Domy¶lnie 1.
    • session.gc_maxlifetime okre¶la liczbê sekund po których dane bêd± uznane jako "¶mieci" i zostan± usuniête.
    • session.extern_referer_check okre¶la czy identyfikatory sesji odebrane z zewnêtrznych witryn maj± byæ usuniête. Je¿eli identyfikatory sesji s± umieszczane w URL, u¿ytkownicy nie znaj±cy zasady dzia³ania tej metody, mog± nie¶wiadomie rozpowszechniaæ swój session id, co prowadzi do problemów z bezpieczeñstwem. Domy¶lnie 0 (wy³±czone).
    • session.entropy_file zawiera ¶cie¿kê do zewnêtrznych zasobów (pliku), który bêdzie dodatkowo wykorzystywany w procesie tworzenia identyfikatora sesji. Przyk³ady: /dev/random lub /dev/urandom które s± dostêpne w systemach Unix.
    • session.entropy_length okre¶la liczbê bajtów, które bêd± odczytywane z pliku okre¶lonego wy¿ej (session.entropy_file). Domy¶lnie 0 (wy³±czone).
    • session.use_cookies okre¶la, czy modu³ sesji bêdzie u¿ywa³ cookie do zapisywania identyfikatora sesji po stronie klienta. Domy¶lnie 1 (w³±czone).
    Uwaga: Obs³uga sesji zosta³a dodana w PHP 4.0.

     

    session_start

    session_start - inicjuje sesjê

     

    Opis

    bool session_start(void);

    session_start() tworzy sesjê (lub reasumuje wcze¶niejsz±, bazuj±c na identyfikatorze sesji przes³anym jako zmienna w zapytaniu GET lub w cookie).

    Ta funkcja zawsze zwraca true.

    Uwaga: Funkcja zosta³a dodana w PHP 4.0.

     

    session_destroy

    session_destroy - niszczy wszystkie dane zarejestrowane w sesji

     

    Opis

    bool session_destroy(void);

    session_destroy() niszczy wszystkie dane nale¿±ce do aktualnej sesji. Ta funkcja zawsze zwraca true.

     

    Uwaga: Funkcja zosta³a dodana w PHP 4.0.

     

    session_name

    session_name - pobiera i/lub ustawia nazwê aktualnej sesji

     

    Opis

    string session_name(string [nazwa]);

    session_name() zwraca nazwê bie¿±cej sesji. Je¿eli nazwa jest ju¿ okre¶lona, to nazwa bie¿±cej sesji jest zmieniana na tê warto¶æ.

    Nazwa sesji odpowiada identyfikatorowi sesji zamieszczonemu w cookies czy URL'u. Nazwa powinna zawieraæ tylko znaki alfanumeryczne; powinna byæ krótka i opisowa (np. dla u¿ytkowników z w³±czonym powiadamianiem o nadej¶ciu cookie). Nazwa sesji jest zmieniana na warto¶æ domy¶ln± zapisan± w session.name podczas startu zapytania. W ten sposób, musisz wywo³aæ funkcjê session_name() dla ka¿dego zapytania (przed wywo³aniem session_start() lub session_register()).

    Przyk³ad 1. Session_name()

    <?php
    
    # ustawia nazwê sesji na WebsiteID
    
    $previous_name = session_name("WebsiteID");
    
    echo "Poprzednia nazwa sesji to $previous_name<p>";
         
    Uwaga: Funkcja zosta³a dodana w PHP 4.0.

     

    session_module_name

    session_module_name - pobiera i/lub ustawia bie¿±cy modu³ sesji

     

    Opis

    string session_module_name(string [modu³]);

    session_module_name() zwraca nazwê aktualnego modu³u sesji. Je¿eli modu³ jest ju¿ okre¶lony, w jego miejsce u¿ywany jest modu³ tu podany.

    Uwaga: Funkcja zosta³a dodana w PHP 4.0.

     

    session_save_path

    session_save_path - pobiera i/lub ustawia ¶cie¿kê zapisu aktualnej sesji

     

    Opis

    string session_save_path(string [¶cie¿ka]);

    session_save_path() zwraca ¶cie¿kê do katalogu u¿ywanego do zapisu danych sesji. Je¿eli ¶cie¿ka jest ju¿ okre¶lona, zostaje zast±piona ¶cie¿k± tu zdefiniowan±.

    Uwaga: na niektórych systemach mo¿esz podaæ ¶cie¿kê do systemu plików, który lepiej obs³uguje ma³e pliki, np. w Linuxie, system plików reiserfs mo¿e byæ bardziej wydajny ni¿ zwyk³y ext2fs.
    Uwaga: Funkcja zosta³a dodana w PHP 4.0.

     

    session_id

    session_id - pobiera i/lub ustawia aktualny identyfikator sesji

     

    Opis

    string session_id(string [id]);

    session_id() zwraca identyfikator dla aktualnej sesji. Je¿eli id jest ju¿ okre¶lony, zostanie zast±piony tu zdefiniowanym.

    Uwaga: Funkcja zosta³a dodana w PHP 4.0.

     

    session_register

    session_register - rejestruje (zapisuje) jedn± lub wiêcej zmiennych w bie¿±cej sesji

     

    Opis

    bool session_register(mixed name, mixed [...]);

    session_register() rejestruje zmienn± liczbê argumentów, z których ka¿dy mo¿e zawieraæ nazwê zmiennej (nie sam± zmienn±) lub tablicê zawieraj±c± nazwy zmiennych lub inne tablice . Dla ka¿dej zmiennej, session_register() rejestruje (zapisuje) nazwê zmiennej w bie¿±cej sesji.

    Funkcja zwraca true je¶li zmienna zostanie pomy¶lnie zarejestrowana w sesji (np. zapisana w pliku sesji).

    Uwaga: Funkcja zosta³a dodana w PHP 4.0.

     

    session_unregister

    session_unregister - usuwa zmienn± z bie¿±cej sesji

     

    Opis

    bool session_unregister(string nazwa);

    session_unregister() usuwa zmienn± nazwa z bie¿±cej sesji.

    Funkcja zwraca true je¶li zmienna zostanie pomy¶lnie usuniêta z sesji.

     

    Uwaga: Funkcja zosta³a dodana w PHP 4.0.

     

    session_is_registered

    session_is_registered - sprawdza czy zmienna jest ju¿ zarejestrowana w sesji

     

    Opis

    bool session_is_registered(string nazwa);

    session_is_registered() zwraca true je¶li zmienna o nazwie nazwa jest ju¿ zarejestrowana w bie¿±cej sesji

    Uwaga: Funkcja zosta³a dodana w PHP 4.0.

     

    session_decode

    session_decode - dekoduje dane sesji z ³añcucha znaków (string)

     

    Opis

    bool session_decode(string dane);

    session_decode() dekoduje dane sesji zapisane w stringu dane, ustawiaj±c zmienne w sesji.

    Uwaga: Funkcja zosta³a dodana w PHP 4.0.

     

    session_encode

    session_encode - koduje dane bie¿±cej sesji do postaci ³añcucha znaków (string)

     

    Opis

    bool session_encode(void);

    session_encode() zwraca ³añcuch znaków (string) z zawarto¶ci± (danymi) bie¿±cej sesji

    Uwaga: Funkcja zosta³a dodana w PHP 4.0.



    hm 2000

    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