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.