webm

Sesje w PHP

Posted on: Lipiec 31, 2007

Co to są sesja?
Sesja to sposób na przekazywanie zmiennych między stronami. Po zainicjowaniu sesji tworzona jest na serwerze tymczasowa tablica danych. Do klienta natomist wysyłane jest ciasteczko z identyfikatorem sesji. Jak zepewne się domyślasz id jest kluczem, umożliwiającym utrzymanie danych, które chcemy przekazywać między stronami.

Podstawowe funkcje
session_start(); // inicjowanie sesji
session_register( zmienna ); // rejestracja sesji
$_SESSION['zmienna'] //zmienna sesji

Przykłady:

Naliczanie odświeżeń strony

session_start(); // inicjowanie sesji

if (!isset($_SESSION['count'])) { // jeśli zmienna nie jest zarejestrowana
$_SESSION['count'] = 0; // przypisz jej początkową wartość
} else { // jeśli jest zarejestrowana
$_SESSION['count']++; // zwiększ jej wartość
}

echo 'Strona odczytana '.$_SESSION['count'].' razy w ciągu tej sesji';

Obsługa różnych wersji językowych

if (!empty($_GET['lang'])) { // jeżeli kliknięto na link, by zmienić język
$lang=$_GET['lang'];
setcookie('bit_lang', $lang, time()+6048000); //ustawiamy ciacho
$j=$lang; // i język
} else { // w przeciwnym razie
if (isset($_COOKIE['bit_lang'])) { // sprawdza, czy ciacho jest
$j=$_COOKIE['bit_lang']; // jeśli tak - pobieramy je
// i przypisujemy do $j
}
else $j='pl'; // jeśli ciacha nie ma, ustawiamy wartość domyślną
}

//blok sterujący
$dz=array();
if ($j=="pl") { // dane dla wersji PL
$dz[0]="Home"; //menu
$dz[1]="Produkt";
$dz[2]="Kontakt";
$tytul="Jakiś tytuł"; //można ustawić wiele różncyh zmiennych
$brak="Artykuł nie istnieje";
} elseif ($j=="ang") { //ANG
$dz[0]="Home";
$dz[1]="Products ";
$dz[3]="Contact";
$tytul="Title...";
$brak="The article doesn't exist";
}

Funkcje:

session_start()
Nie wymaga argumentu. Powoduje, że PHP odczytuje identyfikator sesji przekazany do strony (dzięki cookie lub GET, POST); jeżeli nie może go odszukać, tworzy nowy identyfikator sesji. Jeżeli odnaleziony został stary identyfikator sesji, PHP odtwarza przypisania do wszystkich zarejestrowanych zmiennych i udostępnia te wartości jako zwykłe zmienne globalne.

session_register()
Wymaga ciągu jako argumentu i rejestruje zmienną o nazwie określonej przez ciąg – na przykład session_register(‚username’) rejestruje zmienną o nazwie username. Nazwa zmiennej nie powinna zawierać początkowego znaku ‚$’. Można równieżprzekazać tablicę ciągów, aby za jedym razem zarejestrować wiele zmiennych. Efektem rejestracji jest zapamiętanie przypisań do obiektów (po zakończeniu skryptu zarejestrowane zmienne podlegają serializacji i są przenoszone w sposób, który zapewnia ich odtworzenie w wywołaniu session_start()). Jeżeli nie wywołano wcześniej funkcji session_start(), session_register() niejawnie ją wywołuje.

session_unregister()
Wymaga ciągu jako argumentu i usuwa z listy zarejestrowanych zmiennych zmienną o nazwie przekazanej jako argument. W wyniku tego zmienna ta nie będzie podlegała serializacji i nie będzie przenoszona pomiędzy stronami (nazwa zmiennej nie powinna zawierać początkowego znaku ‚$’.

session_is_registered()
Sprawdza, czy zmienna o podanej nazwie jest zarejestrowana w bieżącej sesji, zwracając TRUE, jeżeli zmienna jest zarejestrowana, FALSE, jeżeli nie jest.

session_destroy()
Wywołanie tej funkcji usuwa wszystkie zapamiętane dane o sesji (identyfikator sesji nie musi się zmieniać po wywołaniu tej funkcji). Wywołanie tej funkcji nie zmienia wartości żadnych zmiennych w bieżącym sktypcie.

session_name()
Funkcja wywołana bez parametrów zwraca nazwę bieżącej sesji. Jest to zwykle ‚PHPSESSID’. Wywołana z jedym argumentem session_name() ustawia nazwę bieżącej sesji na podany ciąg. Nazwa ta jest używana jako klucz do odszukania identyfikatora sesji w cookie lub argumentach GET, POST. Aby odnalezienie sesji się udało, nazwa sesji musi być identyczna jak nazwa sesji, w trakcie której poddano zmienne serializacji. Zauważ, że nie ma powodu do zmiany nazwy sesji, chyba, że chcesz rozróżniać różne typy sesji obsługiwanych jednocześnie przez serwer WWW (np. w przypadku wielu witryn korzystających z sesji). Nazwa sesji jest zmienna na domyślną za każdym uruchomieniem skryptu, więc zmiana nazwy sesji musi zostać wykonana w każdym skrypcie przez wywołaniem innej funkcji obsługi sesji.

session_module_name()
Jeżeli nie zostaną podane żadne argumenty, funkcja zwraca nazwę modułu odpowiedzialnego za obsługę danych sesji. Nazwa ta jest domyślnie ustawiona na ‚files’, co oznacza, że dane sesji po serializacji są zapisywane do plików w katalogu ustawionym przez funkcję session_save_path(). Jeżeli podany zostanie ciąg jako argument, nazwa modułu jest zmienna na ten ciąg (np. ‚user’ dla zdefiniowanej przez użytkownika bazy danych sesji; ale nie powinieneś zmieniać tego parametru, jeżeli nie wiesz dokładnie co robisz).

session_save_path()
Zwraca (lub ustawia w przypadku podania argumentu) ścieżkę do katalogu, w którym zapisywane są wartości zmiennych sesji (zwykle jest to /tmp w systemach Unix). Katalog ten musi mieć odpowiednio ustawione uprawniwnia, aby PHP mógł tam zapisywać pliki.

session_id()
Nie ma argumentów. Zwraca ciąg, który jest kluczem, określającym sesje. Jeżeli zostanie przekazany argument, funkcja ta ustawi identyfikator sesji na tę wartość.

session_encode()
Zwraca ciąg z zakodowanym stanem bieżącej sesji, który może zostać zdekodowany przez funkcję session_decode(). Ciąg ten może zostać użyty do zapamiętania sesji w celu odtworzenia jej za jakiś czas (np. zapisanie zakodowanego ciągu w pliku lub w bazie danych).

session_decode()
Pobiera wynik działania funkcji session_encode() i odtwarza stan sesji, zmieniając zmienne sesji na zmienne strony (analogicznie do session_start()).

Reklamy
Tagi: ,

1 Response to "Sesje w PHP"

Kiedy z serwera usuwane są dane sesji czyli faktyczne pliki przechowywujące informacje? Jeden plik odpowiedzialny jest za 1 sesję a w środku niego znajdują się zserializowane dane.

Czas życia sesji to załóżmy 24min i co się dzieje po tym czasie zakładając że użytkownik w tym czasie nie wejdzie na stronę?

Na pewno serwer nie usuwa danych sesji bo co z opcja pamiętaj mnie na tym komputerze przez 2 tygodnie. Wtedy ciasteczko w przeglądarce wygaśnie po tym czasie ale serwer nie wie o tym czy to jest 14 dni czy rok.

Zatem jak długo trzymane są dane sesji po stronie serwera?

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s

%d blogerów lubi to: