Yii - Sesje

Sesje udostępniają dane na różnych stronach. Sesja tworzy plik na serwerze w katalogu tymczasowym, w którym przechowywane są wszystkie zmienne sesji. Dane te są dostępne dla wszystkich stron Twojej witryny internetowej podczas wizyty tego konkretnego użytkownika.

Po rozpoczęciu sesji dzieje się co następuje -

  • PHP tworzy unikalny identyfikator dla tej konkretnej sesji.

  • Plik cookie o nazwie PHPSESSID jest wysyłany po stronie klienta (do przeglądarki).

  • Serwer tworzy plik w folderze tymczasowym, w którym zapisywane są wszystkie zmienne sesji.

  • Gdy serwer chce pobrać wartość ze zmiennej sesji, PHP automatycznie pobiera unikalny identyfikator sesji z pliku cookie PHPSESSID. Następnie szuka w katalogu tymczasowym potrzebnego pliku.

Aby rozpocząć sesję, należy zadzwonić pod numer session_start()funkcjonować. Wszystkie zmienne sesji są przechowywane w pliku$_SESSIONzmienna globalna. Możesz także użyćisset() funkcja, aby sprawdzić, czy zmienna sesji jest ustawiona -

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

Aby zniszczyć sesję, powinieneś wywołać session_destroy()funkcjonować. Aby zniszczyć pojedynczą zmienną sesji, wywołajunset() funkcja -

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

Korzystanie z sesji w Yii

Sesje umożliwiają utrwalanie danych we wszystkich żądaniach użytkowników. W PHP możesz uzyskać do nich dostęp poprzez plik$_SESSIONzmienna. W Yii możesz uzyskać dostęp do sesji poprzez komponent aplikacji sesji.

Step 1 - Dodaj actionOpenAndCloseSession metoda do SiteController.

public function actionOpenAndCloseSession() {
   $session = Yii::$app->session;
   // open a session
   $session->open(); // check if a session is already opened if ($session->isActive) echo "session is active";
   // close a session
   $session->close(); // destroys all data registered to a session $session->destroy();
}

W powyższym kodzie pobieramy komponent aplikacji sesji, otwieramy sesję, sprawdzamy czy jest aktywna, zamykamy sesję, a na końcu niszczymy.

Step 2 - Typ http://localhost:8080/index.php?r=site/open-and-close-session na pasku adresu przeglądarki internetowej zobaczysz następujące informacje.

Aby uzyskać dostęp do zmiennych sesji, możesz użyć set() i get() metody.

Step 3 - Dodaj actionAccessSession metoda do SiteController.

public function actionAccessSession() {

   $session = Yii::$app->session;
	
   // set a session variable
   $session->set('language', 'ru-RU'); // get a session variable $language = $session->get('language'); var_dump($language);
		  
   // remove a session variable
   $session->remove('language'); // check if a session variable exists if (!$session->has('language')) echo "language is not set";
		  
   $session['captcha'] = [ 'value' => 'aSBS23', 'lifetime' => 7200, ]; var_dump($session['captcha']);
}

Step 4 - Idź do http://localhost:8080/index.php?r=site/access-sessionzobaczysz, co następuje.