Yii 会话
会话使得数据可以在不同页面之间访问。一个会话在服务器上创建一个文件,并将所有的会话变量存储在一个临时目录中。在特定用户访问期间,这些数据对于网站的所有页面都是可用的。
会话启动时,以下操作会发生:
- PHP为该会话创建一个唯一的ID。
-
在客户端上发送一个名为PHPSESSID的cookie(给浏览器)。
-
服务器在临时文件夹中创建一个文件,将所有会话变量保存其中。
-
当服务器想要从会话变量中检索值时,PHP会自动从PHPSESSID cookie中获取唯一的会话ID。然后,在其临时目录中查找所需的文件。
要启动一个会话,您应该调用 session_start() 函数。所有的会话变量都存储在 $_SESSION 全局变量中。您还可以使用 isset() 函数来检查会话变量是否已设置。
<?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;
?>
要销毁一个会话,您应该调用 session_destroy() 函数。要销毁一个单独的会话变量,调用 unset() 函数 –
<?php
unset($_SESSION['number']);
session_destroy();
?>
在Yii中使用会话
会话允许在用户请求之间保持数据的持久性。在PHP中,您可以通过 $_SESSION 变量访问它们。在Yii中,您可以通过会话应用程序组件来访问会话。
步骤1 - 将 actionOpenAndCloseSession 方法添加到 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 sessionsession->destroy();
}
在上面的代码中,我们获取会话应用组件,打开一个会话,检查它是否活动,关闭会话,最后销毁它。
步骤2 - 在Web浏览器的地址栏中输入 http://localhost:8080/index.php?r=site/open-and-close-session ,将会看到以下内容。
要访问会话变量,您可以使用 set() 和 get() 方法。
步骤3 - 添加一个 actionAccessSession 方法到 SiteController 。
public function actionAccessSession() {
session = Yii::app->session;
// set a session variable
session->set('language', 'ru-RU');
// get a session variablelanguage = 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']);
}
步骤4 − 前往 http://localhost:8080/index.php?r=site/access-session ,你将会看到以下内容。