请求处理 - Session

  • 作者:KK

  • 发表日期:2016.12.13


用的是session组件,是个核心组件,所以默认不用额外定义什么

主要用法

客官请复制

    public function actionTest(){
		$session = Yii::$app->session;
		
		if(!$session->has('key1')){
			$session->set('key1', 11);
		}
		
		echo $session->get('key1'); //11
		$session->remove('key1');
		
		echo $session->count; //1
		
		//就像request->get('page', 1)
		echo $session->get('key1', 22); //不存在,返回默认值22
		
		if($session->isActive){
			//session活动中,关闭它
			echo 33;
			$session->close();
		}
		
		if(!$session->isActive){
			//session已经不活动了
			echo 44;
			
			//$session->open(); //自己试,底层有session_start
			
			$session->set('key1', 99); //会自动open
			echo $session->get('key1'); //99
		}
    }

其它

  • removeAll()清除所有session

  • 不支持session前缀配置


Flash数据

官方的Session文档中有Flash这一教程,这不是说浏览器的Flash插件,而是Yii基于session定义的一个子概念“闪存数据”,闪一下就不见了

应用场景示例是这样的:

  1. 用户同步请求a地址删除一个数据,并session->setFlash('success', '删除成功'),其实存进了session

  2. 删除成功,输出一个提示页面

  3. 页面模板通过session->getFlash('success')输出删除成功的提示,并且在session里自动remove了这个success的key

其中如果getFlash没获取到相关的值也不会报错

有兴趣的同学自己去官网看看

我的带的项目基本都是前后分离的,所以传递提示内容给前端都是靠接口出json而不靠Yii的Flash,示例https://github.com/kk8686/xoa/blob/master/server/home/controllers/TaskController.php#L29