- Yii 教程
 - Yii - 主页
 - Yii - 概述
 - Yii - 安装
 - Yii - 创建页面
 - Yii - 应用程序结构
 - Yii - 入口脚本
 - Yii - 控制器
 - Yii - 使用控制器
 - Yii - 使用动作
 - Yii - 模型
 - Yii - 小部件
 - Yii - 模块
 - Yii - 视图
 - Yii - 布局
 - Yii - 资产
 - Yii - 资产转换
 - Yii - 扩展
 - Yii - 创建扩展
 - Yii - HTTP 请求
 - Yii - 响应
 - Yii - URL 格式
 - Yii - URL 路由
 - Yii - URL 规则
 - Yii - HTML 表单
 - Yii - 验证
 - Yii - 临时验证
 - Yii - AJAX 验证
 - Yii - 会话
 - Yii - 使用闪存数据
 - Yii - cookie
 - Yii - 使用 Cookie
 - Yii - 文件上传
 - Yii - 格式化
 - Yii - 分页
 - Yii - 排序
 - Yii - 属性
 - Yii - 数据提供者
 - Yii - 数据小部件
 - Yii - 列表视图小部件
 - Yii - GridView 小部件
 - Yii - 活动
 - Yii - 创建事件
 - Yii - Behave
 - Yii - 创建Behave
 - Yii - 配置
 - Yii - 依赖注入
 - Yii - 数据库访问
 - Yii - 数据访问对象
 - Yii - 查询生成器
 - Yii - 活动记录
 - Yii - 数据库迁移
 - Yii - 主题化
 - Yii - RESTful API
 - Yii - RESTful API 的实际应用
 - Yii - 字段
 - Yii - 测试
 - Yii - 缓存
 - Yii - 片段缓存
 - Yii - 别名
 - Yii - 日志记录
 - Yii - 错误处理
 - Yii - 身份验证
 - Yii - 授权
 - Yii - 本地化
 - Yii-Gii
 - Gii – 创建模型
 - Gii – 生成控制器
 - Gii – 生成模块
 
- Yii 有用的资源
 - Yii - 快速指南
 - Yii - 有用的资源
 - Yii - 讨论
 
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 session
   $session->destroy();
}
在上面的代码中,我们获取了会话应用程序组件,打开一个会话,检查它是否处于活动状态,关闭会话,最后销毁它。
步骤 2 - 在网络浏览器的地址栏中输入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 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']);
}
步骤 4 - 转到http://localhost:8080/index.php?r=site/access-session,您将看到以下内容。
