PHP - sesje

Alternatywnym sposobem udostępnienia danych na różnych stronach w całej witrynie jest użycie sesji PHP.

Sesja tworzy plik w katalogu tymczasowym na serwerze, w którym przechowywane są zarejestrowane zmienne sesji i ich wartości. Te dane będą dostępne dla wszystkich stron w witrynie podczas tej wizyty.

Lokalizacja pliku tymczasowego jest określana przez ustawienie w php.ini plik o nazwie session.save_path. Przed użyciem dowolnej zmiennej sesji upewnij się, że skonfigurowałeś tę ścieżkę.

Po rozpoczęciu sesji dzieją się następujące rzeczy -

  • PHP najpierw tworzy unikalny identyfikator dla tej konkretnej sesji, który jest losowym ciągiem 32 liczb szesnastkowych, na przykład 3c7foj34c3jj973hjkop2fc937e3443.

  • Plik cookie o nazwie PHPSESSID jest automatycznie wysyłany do komputera użytkownika w celu przechowywania unikalnego ciągu identyfikującego sesję.

  • Plik jest tworzony automatycznie na serwerze w wyznaczonym katalogu tymczasowym i nosi nazwę unikalnego identyfikatora z prefiksem sess_ ie sess_3c7foj34c3jj973hjkop2fc937e3443.

Gdy skrypt PHP chce pobrać wartość ze zmiennej sesji, PHP automatycznie pobiera unikalny ciąg identyfikujący sesję z pliku cookie PHPSESSID, a następnie szuka w katalogu tymczasowym pliku o tej nazwie i można przeprowadzić walidację, porównując obie wartości.

Sesja kończy się, gdy użytkownik utraci przeglądarkę lub po opuszczeniu witryny, serwer zakończy sesję po z góry określonym czasie, zwykle trwającym 30 minut.

Rozpoczynanie sesji PHP

Sesję PHP można łatwo rozpocząć, wykonując wywołanie pliku session_start()Funkcja ta najpierw sprawdza, czy sesja jest już uruchomiona, a jeśli żadna nie została uruchomiona, rozpoczyna ją. Zaleca się nawiązanie połączenia zsession_start() na początku strony.

Zmienne sesji są przechowywane w tablicy asocjacyjnej o nazwie $_SESSION[]. Dostęp do tych zmiennych można uzyskać w czasie trwania sesji.

Poniższy przykład uruchamia sesję, a następnie rejestruje zmienną o nazwie counter która jest zwiększana za każdym razem, gdy strona jest odwiedzana podczas sesji.

Zrobić użytek z isset() funkcji, aby sprawdzić, czy zmienna sesji jest już ustawiona, czy nie.

Umieść ten kod w pliku test.php i wczytaj ten plik wiele razy, aby zobaczyć wynik -

<?php
   session_start();
   
   if( isset( $_SESSION['counter'] ) ) {
      $_SESSION['counter'] += 1;
   }else {
      $_SESSION['counter'] = 1;
   }
	
   $msg = "You have visited this page ".  $_SESSION['counter'];
   $msg .= "in this session.";
?>

<html>
   
   <head>
      <title>Setting up a PHP session</title>
   </head>
   
   <body>
      <?php  echo ( $msg ); ?>
   </body>
   
</html>

To da następujący wynik -

You have visited this page 1in this session.

Niszczenie sesji PHP

Sesja PHP może zostać zniszczona przez session_destroy()funkcjonować. Ta funkcja nie potrzebuje żadnego argumentu, a pojedyncze wywołanie może zniszczyć wszystkie zmienne sesji. Jeśli chcesz zniszczyć pojedynczą zmienną sesji, możesz użyćunset() funkcji, aby usunąć ustawienie zmiennej sesji.

Oto przykład usunięcia jednej zmiennej -

<?php
   unset($_SESSION['counter']);
?>

Oto wywołanie, które zniszczy wszystkie zmienne sesji -

<?php
   session_destroy();
?>

Włączanie sesji automatycznej

Nie musisz wywoływać funkcji start_session (), aby rozpocząć sesję, gdy użytkownik odwiedza Twoją witrynę, jeśli możesz ustawić session.auto_start zmienna na 1 cal php.ini plik.

Sesje bez plików cookie

Może wystąpić sytuacja, w której użytkownik nie zezwoli na przechowywanie plików cookie na swoim komputerze. Jest więc inna metoda wysyłania identyfikatora sesji do przeglądarki.

Alternatywnie możesz użyć stałego identyfikatora SID, który jest definiowany w momencie rozpoczęcia sesji. Jeśli klient nie wysłał odpowiedniego pliku cookie sesji, ma on postać nazwa_sesji = id_sesji. W przeciwnym razie rozwija się do pustego ciągu. W ten sposób możesz bezwarunkowo osadzić go w adresach URL.

Poniższy przykład pokazuje, jak zarejestrować zmienną i jak poprawnie połączyć się z inną stroną przy użyciu identyfikatora SID.

<?php
   session_start();
   
   if (isset($_SESSION['counter'])) {
      $_SESSION['counter'] = 1;
   }else {
      $_SESSION['counter']++;
   }
   
   $msg = "You have visited this page ".  $_SESSION['counter'];
   $msg .= "in this session.";
   
   echo ( $msg );
?>

<p>
   To continue  click following link <br />
   
   <a  href = "nextpage.php?<?php echo htmlspecialchars(SID); ?>">
</p>

To da następujący wynik -

You have visited this page 1in this session.
To continue click following link

Plik htmlspecialchars() może być używany podczas drukowania identyfikatora SID, aby zapobiec atakom związanym z XSS.