****************************** *** O sesjach s�ow kilka *** *** Autor: mati *** ****************************** Nio to mo�e troche ja powiem :). 1. Do czego sesje - wy wiecie ale inni mog� nie wiedzie� a mo�e im si� przyda. Sesje - podobnie jak cookie - przenosz� informacje dotycz�ce konkretnego u�ytkownika pomi�dzy stronami serwisu. Przyk�ad? Sklep internetowy gdzie w ka�dym momencie user mo�e przeglada� stan swojego koszyka. 2. Zasada dzia�ania. - Od tego powinno si� zacz�� czytaj�c o sesjach. Ostatnie pytania na forum wskazuj� o ra��cej niewiedzy zasady dzia�ania mechanizmu sesji i je�li kto� by mia� poj�cie o tym mechani�mie to wielu pyta� mo�na by unikn�� (np. jak doda� do link�w id sesji). Do rzeczy. Jak ju� pisa�em celem sesje jest przenoszenie informacji dotycz�cych konkretnego u�ytkownika pomi�dzy stronami serwisu. Protoku� HTTP nie posiada takiej mo�liwo�ci. Nie trzeba korzysta� z gotowego mechanizmu sesji - mo�na napisa� co� takiego(mam na my�li metod� identyfikowania u�ytkownika a nie dos�ownie"mechanizm sesji") samemu . Postaram si� poda� wskaz�wki jak do tego si� zabra� - kto� kto to przeczyta pozna te� zasade dzia�ania sesji w PHP4 poniewa� tak samo jest to skonstruowane. Zadajmy sobie kilka pyta� - co mo�na do tego wykorzysta�. Odpowied� jest prosta - formularze , przekazywanie parametr�w metod� GET , pliki textowe oraz cookies. Zaczynamy po najmniejszej linii oporu tak wi�c cookies. Opieramy si� na tym �e ta cz�� kt�ra akceptuje cookies b�dzie identyfikowana za ich pomoc�. Wystarczy im pos�a� w cookie unikalny identyfikator - ID sesji (mo�na w tym celu wykorzysta� jeden z modu��w apache - mod_usertrack). Mo�na te� wykorzysta� funkcje uniqid (wi�cej w manualu) - generuje ona na podstawie zagara czasowego losowy identyfikator. W przypadku os�b kt�re akceptuj� cookie mo�esz w plikach na serwerze pami�ta� dotycz�ce ich informacje. Na ka�dej stronie po odczytaniu ID mo�esz odwo�ywa� si� do pliku i pobiera� informacje dotycz�ce tego usera. Sprawa jest gorsza gdy u�ytkownik nie akceptuje cookies. W jaki spos�b wtedy przes�a� ID u�ytkownika ? Sprawa jest prosta - trzeba przes�a� to metod� GET. Link wygl�da wtedy nie www.dupa.pl/dupa.php a www.dupa.pl/dupa.php?id=id_usera . Potem tylko pobieramy $id i sprawdzamy plik na serwerze. Nio , ale po co si� m�czy� je�li s� sesje ? Je�eli u�ytkownik ma w��czone przyjmowanie cookie to id sesji przesy�ane jest przez cookie , je�li nie - przez GET . Najlepsze jest to �e my mamy to w **** czy user ma w��czone cookies czy nie. Po prostu wiemy na 100% �e identyfikator zostanie przeniesiony (nale�y pilnowa� aby by� w ka�dym pliku inicjowany mechanizm sesji przez session_start - ale o tym potem). Przyk�adzik - warto go wykona�: Tworzymy plik test.php a w nim: <? session_start(); echo session_id(); ?> <br><br> <a href=test.php>test</a> Wy��czmy przyjmowanie cookie i sprawdzmy plik. Wy�wietli si� nam identyfikator sesji a poni�ej link. Co jeszcze ? Do adresu doklejony jest identyfikator sesji. Teraz w��czmy cookie i co? identyfikatora nie ma. Jest on przesy�any w cookie. �atwe i przyjemne co ? :) 3. Co jeszcze - czyli kiedy rejestrowa� a kiedy nie. Identyfikacja u�ytkownika to nie wszystko do czego wykorzystuje sesje. Mo�emy bardzo �atwo pami�ta� dla ka�dego usera r�ne warto�ci i mie� w ka�dej chwili do nich dost�p. Jako przyk�ad pos�u�e si� skryptem licz�cym ile razy user wszed� na strone w ci�gu trwania sesji. plik : licznik.php <? session_start(); echo session_id(); if(isset($ile)) { $ile++; } else { $ile = 1; } echo("<br><br> Ilo�� wej�� na strone w ci�gu trwania sesji: $ile"); session_register("ile"); ?> <a href=licznik.php>link</a> Sprawd�my plik z w��czyn� i wy��czon� obs�ug� cookies. Wynik podobny jak poprzednio - tyle �e mamy jeszcze licznik. MALUTKI OPIS DZIA�ANIA. Je�li zmienna $ile jest zdefiniowana to inkrementujemy j� . Je�li nie - przypisujemy jej warto�� 1. Do sprawdzenia wykorzysta�em isset , r�wnie dobrze mo�na to zrobi� poprze empty. Jednak je�li chodzi o sesje to najciekawszy element to session_register. Funkcja ta zapami�tyje warto�� zmiennej o nazwie okre�lonej parametrem (ale zamiesza�em :) . Jako parametr podajemy nazwe zmiennej (uwaga: bez znaku $). Powoduje to zapami�tanie warto�ci zmiennej dla danej sesji. Po odczytaniu dowolnego dokumentu serwisu je�eli uzytkownik zostanie zidentyfikowany , warto�� tej zmiennej b�dzie widoczna. Kolejny prosty przyk�ad: plik: imie.php <? session_start(); if(!isset($imie)) { ?> <form method=POST> <input type="text" name="imie><input type="submit" name="submit" value="OK"> </form> >? } else { echo("masz na imie: $imie"); session_regiser ("imie"); } ?> <a href=imie.php>Link</a> Je�li pierwszy raz wywo�ujemy strone w ci�gu sesji (nie jest zarejestrowana zmienna $imie)poka�e nam si� formularz. Wpiszmy do niego swoje imie. Po naci�ni�ciu Ok zmiennej zostanie przypisane imie , a zmienna zarejestrowana w sesji. Od teraz do czasu wyga�niecia sesji lub wy��czenia przegl�darki b�dzie widoczne "masz na imie <twoje imie>". 4. Jak d�ugo i gdzie. Pojawi�o si� i to pytanie - a raczej odpowied�. Jak d�ugo "�yje" sesja. Kto� pisa� o godzinie. Bzdura . Sesyjne cookies �yje do momentu wy��czenia przegl�darki. A czas aktywno�ci sesji ustala si� w pliku httpd.conf lub php.ini wpisuj�c (chyba- g�owy nie dam) w session.cache_expire. Domy�lnie jest to 180 minut. A teraz Gdzie. Okre�lamy to w php.ini w session.save
rzuczek1