Yii - Sesiones

Las sesiones hacen que los datos sean accesibles en varias páginas. Una sesión crea un archivo en el servidor en un directorio temporal donde se almacenan todas las variables de sesión. Estos datos están disponibles para todas las páginas de su sitio web durante la visita de ese usuario en particular.

Cuando comienza una sesión, sucede lo siguiente:

  • PHP crea una ID única para esa sesión en particular.

  • Se envía una cookie llamada PHPSESSID en el lado del cliente (al navegador).

  • El servidor crea un archivo en la carpeta temporal donde se guardan todas las variables de sesión.

  • Cuando un servidor desea recuperar el valor de una variable de sesión, PHP obtiene automáticamente la ID de sesión única de la cookie PHPSESSID. Luego, busca en su directorio temporal el archivo necesario.

Para iniciar una sesión, debe llamar al session_start()función. Todas las variables de sesión se almacenan en el$_SESSIONvariable global. También puede utilizar elisset() función para verificar si la variable de sesión está configurada -

<?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 una sesión, debe llamar al session_destroy()función. Para destruir una sola variable de sesión, llame alunset() función -

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

Usando sesiones en Yii

Las sesiones permiten que los datos se conserven entre las solicitudes de los usuarios. En PHP, puede acceder a ellos a través del$_SESSIONvariable. En Yii, puede acceder a las sesiones a través del componente de la aplicación de sesiones.

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

En el código anterior, obtenemos el componente de la aplicación de sesión, abrimos una sesión, verificamos si está activa, cerramos la sesión y finalmente la destruimos.

Step 2 - Tipo http://localhost:8080/index.php?r=site/open-and-close-session en la barra de direcciones del navegador web, verá lo siguiente.

Para acceder a las variables de sesión, puede utilizar set() y get() métodos.

Step 3 - Agregar un actionAccessSession método para el 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 - Ir a http://localhost:8080/index.php?r=site/access-session, verá lo siguiente.