php - sesje.txt

(5 KB) Pobierz
******************************
***  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
Zgłoś jeśli naruszono regulamin