Yii - Sessões

As sessões tornam os dados acessíveis em várias páginas. Uma sessão cria um arquivo no servidor em um diretório temporário onde todas as variáveis ​​de sessão são armazenadas. Esses dados ficam disponíveis para todas as páginas do seu site durante a visita desse usuário específico.

Quando uma sessão começa, acontece o seguinte -

  • O PHP cria um ID único para aquela sessão particular.

  • Um cookie chamado PHPSESSID é enviado no lado do cliente (para o navegador).

  • O servidor cria um arquivo na pasta temporária onde todas as variáveis ​​de sessão são salvas.

  • Quando um servidor deseja recuperar o valor de uma variável de sessão, o PHP obtém automaticamente o ID de sessão exclusivo do cookie PHPSESSID. Em seguida, ele procura em seu diretório temporário o arquivo necessário.

Para iniciar uma sessão, você deve chamar o session_start()função. Todas as variáveis ​​de sessão são armazenadas no$_SESSIONvariável global. Você também pode usar oisset() função para verificar se a variável de sessão está definida -

<?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;
?>

Para destruir uma sessão, você deve chamar o session_destroy()função. Para destruir uma única variável de sessão, chame ounset() função -

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

Usando Sessões no Yii

As sessões permitem que os dados sejam mantidos nas solicitações do usuário. Em PHP, você pode acessá-los por meio do$_SESSIONvariável. No Yii, você pode obter acesso às sessões por meio do componente de aplicativo de sessão.

Step 1 - Adicione o actionOpenAndCloseSession método para o 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();
}

No código acima, obtemos o componente de aplicativo da sessão, abrimos uma sessão, verificamos se ela está ativa, fechamos a sessão e finalmente a destruímos.

Step 2 - Tipo http://localhost:8080/index.php?r=site/open-and-close-session na barra de endereço do navegador da web, você verá o seguinte.

Para acessar variáveis ​​de sessão, você pode usar set() e get() métodos.

Step 3 - Adicionar um actionAccessSession método para o 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 - Vá para http://localhost:8080/index.php?r=site/access-session, você verá o seguinte.