Sesje - PHP

in #polish6 years ago

Ostatnio na naszym Steemowym kursie PHP omówiliśmy używanie formularzy i wysyłanie ich metodą POST. Dzisiaj porozmawiamy trochę o sesjach.

Jest kolejna metoda wysyłania danych? Nie. Obie metody mają swoje wady i zalety, ale nie potrafią jednego. Przechowywać danych w pamięci. A przecież takie dane jak login użytkownika zalogowanego warto pamiętać zawsze, na przykład w celach autoryzacyjnych.

Czyli dzięki sesji możemy przekazywać dane (zmienne i tablice) w ramach tablicy głównej $_SESSION.

Jak to działa?

W przypadku tworzenia sesji po stronie klienta powstaje ciasteczko. Ciastko to mały plik (coś w rodzaju zmiennej przechowywanej przez przeglądarkę) z danymi. Ciasteczko sesyjne przechowuje identyfikator sesji, który jest wysyłany do serwera. Serwer przechowuje zmienne u siebie i po tym identyfikatorze rozpoznaje kto ma jakie dane mieć dostępne.

Jak rozpocząć?

Aby mieć dostęp do sesji używamy funkcji

session_start();

Za każdym razem jak chcemy pierwszy raz stworzyć sesje lub kontynuować istniejącą używamy tej funkcji.

Od tego momentu do dyspozycji mamy tablicę $_SESSION, w której możemy przechowywać dane, a wygląda to tak

<?php
session_start();
$_SESSION['login']="fervi";

Czyli mamy w $_SESSION indeks "login" o wartości fervi. Teraz zróbmy nowy plik, index2.php (nazwa przykładowa) i w nim dajmy

<?php
session_start();
print_r($_SESSION);

Czyli zostaje uruchomiona sesja w PHP i wyświetlone zostają wszystkie wartości z $_SESSION. U mnie dało to wynik:

Array ( [login] => fervi )

Czyli niezwiązane ze sobą pliki mogą współdzielić część zmiennych. Oczywiście POST czy GET dzięki parametrowi action mogą przesyłać dane do innego pliku, ale sesja jest globalna.

Zniszczenie sesji

Zniszczenie sesji też się przydaje, na przykład gdy użytkownik się wyloguje - służy do tego funkcja session_destroy.

<?php
session_start();
session_destroy();

Warto pamiętać, że sesja musi być zainicjalizowana by ją można było zniszczyć.

Poprzednie zadanie domowe:

Zrobić formularz, który po wpisaniu imienia wyświetla "Witaj, X". Jeśli nie zostały wprowadzone dane to wyświetla "Witaj nieznajomy, podaj swoje imię!". Wszystko na metodzie POST.

<?php

if(!empty($_POST['imie'])) {
echo 'Witaj '.$_POST['imie'];
} else {
echo 'Witaj nieznajomy, podaj swoje imię!';
}

?>

<form method="POST">
<input type="text" name="imie">
<button type="submit">Podaj imię</button>
</form>

Zadanie domowe

Zrobić coś podobnego, ale wpisaną wartość (GET najlepiej) zapisać do sesji.

Coin Marketplace

STEEM 0.30
TRX 0.12
JST 0.033
BTC 64400.33
ETH 3140.71
USDT 1.00
SBD 3.93