博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Yii中Session和cookie的用法
阅读量:5266 次
发布时间:2019-06-14

本文共 4958 字,大约阅读时间需要 16 分钟。

一,在Yii中使用session

1,CHttpSession
与原生态php5的session使用差别是,php5使用session_start();$_session['key'] = $value;
在yii中,session已经被封装。
To start the session, call open(); To complete and send out session data, call close(); To destroy the session, call destroy().
If autoStart is set true, the session will be started automatically when the application component is initialized by the application.

Php代码  
  1. /***** 方式一、实例添加 *****/  
  2. $session=new CHttpSession;   
  3. $session->open();   
  4. $value1=$session['name1'];   
  5.   
  6. /***** 方式二、直接调用应用添加 *****/  
  7. Yii::app()->session->add('name','foobar');   
  8. Yii::app()->session->add('name2','foobar');   
  9. Yii::app()->session->add('name3','foobar');   
  10. //或者   
  11. $session = Yii::app()->session;   
  12. $session['key'] = 'value';   
  13. var_dump($session['key']);   
  14.     
  15. //遍历   
  16. foreach($session as $name=>$value)  
/***** 方式一、实例添加 *****/$session=new CHttpSession;$session->open();$value1=$session['name1'];/***** 方式二、直接调用应用添加 *****/Yii::app()->session->add('name','foobar');Yii::app()->session->add('name2','foobar');Yii::app()->session->add('name3','foobar');//或者$session = Yii::app()->session;$session['key'] = 'value';var_dump($session['key']); //遍历foreach($session as $name=>$value)

一个实例,

Php代码  
  1. $session = new CHttpSession;   
  2. $session->open();   
  3.            
  4. $user_id = $this->user->id;   
  5. $sessionKey = $user_id.'_is_sending';   
  6.            
  7. if(isset($session[$sessionKey])){   
  8.     $first_submit_time = $session[$sessionKey];   
  9.     $current_time      = time();   
  10.     if($current_time - $first_submit_time < 10){   
  11.         $session[$sessionKey] = $current_time;   
  12.         $this->response(array('status'=>1, 'msg'=>'不能在10秒钟内连续发送两次。'));   
  13.     }else{   
  14.         unset($session[$sessionKey]);//超过限制时间,释放session";   
  15.     }   
  16. }   
  17.   
  18. //第一次点击确认按钮时执行   
  19. if(!isset($session[$sessionKey])){   
  20.     $session[$sessionKey] = time();   
  21. }   
  22.            
  23. var_dump($sessionKey);var_dump($session[$sessionKey]);exit();  
$session = new CHttpSession;$session->open();		$user_id = $this->user->id;$sessionKey = $user_id.'_is_sending';		if(isset($session[$sessionKey])){	$first_submit_time = $session[$sessionKey];	$current_time      = time();	if($current_time - $first_submit_time < 10){		$session[$sessionKey] = $current_time;		$this->response(array('status'=>1, 'msg'=>'不能在10秒钟内连续发送两次。'));	}else{		unset($session[$sessionKey]);//超过限制时间,释放session";	}}//第一次点击确认按钮时执行if(!isset($session[$sessionKey])){	$session[$sessionKey] = time();}		var_dump($sessionKey);var_dump($session[$sessionKey]);exit();

在index.php
在$app->run();前

Php代码  
  1. $session = Yii::app()->session;   
  2. session_set_save_handler(   
  3.     array($session,'openSession'),   
  4.     array($session,'closeSession'),   
  5.     array($session,'readSession'),   
  6.     array($session,'writeSession'),   
  7.     array($session,'destroySession'),   
  8.     array($session,'gcSession')   
  9. );  
$session = Yii::app()->session;session_set_save_handler(	array($session,'openSession'),	array($session,'closeSession'),	array($session,'readSession'),	array($session,'writeSession'),	array($session,'destroySession'),	array($session,'gcSession'));

2,CDbHttpSession
CDbHttpSession继承自 CHttpSession ,把session数据存储在数据库中(表名是YiiSession),
The table name can be changed by setting sessionTableName. If the table does not exist, it will be automatically created if autoCreateSessionTable is set true.
The following is the table structure:
CREATE TABLE YiiSession
(
    id CHAR(32) PRIMARY KEY,
    expire INTEGER,
    data TEXT
)
CDbHttpSession relies on PDO to access database.
By default, it will use an SQLite3 database named 'session-YiiVersion.db' under the application runtime directory. You can also specify connectionID so that it makes use of a DB application component to access database.
When using CDbHttpSession in a production server, we recommend you pre-create the session DB table and set autoCreateSessionTable to be false. This will greatly improve the performance. You may also create a DB index for the 'expire' column in the session table to further improve the performance.

Sql代码  
  1. CREATE TABLE `YiiSession` (   
  2.   `id` char(32) NOT NULL,   
  3.   `expire` int(11) default NULL,   
  4.   `data` text,   
  5.   PRIMARY KEY  (`id`),   
  6.   KEY `expire` (`expire`)   
  7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;  
CREATE TABLE `YiiSession` (  `id` char(32) NOT NULL,  `expire` int(11) default NULL,  `data` text,  PRIMARY KEY  (`id`),  KEY `expire` (`expire`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

例,在../config/main.php中配置

Php代码  
  1. 'session'=>array(   
  2.             'class' => 'CDbHttpSession',   
  3.             'autoStart' => true,   
  4.             'sessionTableName'=>'YiiSession',   
  5.             'autoCreateSessionTable'=> false,   
  6.             'connectionID'=>'db',   
  7.         ),  
'session'=>array(			'class' => 'CDbHttpSession',			'autoStart' => true,			'sessionTableName'=>'YiiSession',			'autoCreateSessionTable'=> false,			'connectionID'=>'db',		),

二,在Yii中使用cookie
Yii实现了一个cookie验证机制,可以防止cookie被修改。启用之后可以对cookie的值进行HMAC检查。
Cookie验证在默认情况下是禁用的。如果你要启用它,可以编辑应用配置 中的组件中的CHttpRequest部分。
一定要使用经过Yii验证过的cookie数据。使用Yii内置的cookies组件来进行cookie操作,不要使用$_COOKIES。
实例:

Php代码  
  1. // 检索一个名为$name的cookie值   
  2. $cookie=Yii::app()->request->cookies[$name];   
  3. $value=$cookie->value;   
  4. ......   
  5. // 设置一个cookie   
  6. $cookie=new CHttpCookie($name,$value);   
  7. Yii::app()->request->cookies[$name]=$cookie

转载于:https://www.cnblogs.com/jshen/archive/2012/12/28/2837565.html

你可能感兴趣的文章
Linux误删恢复
查看>>
Unity调用Windows窗口句柄,选择文件和目录
查看>>
HashMap循环遍历方式
查看>>
React Native 入门 调试项目
查看>>
MySQL数据库 基本操作
查看>>
请大家规范电子邮件用法养成好的邮件习惯
查看>>
微信游戏和微信公众号小说如何有效做好域名防封,给大家分享我的有效经验...
查看>>
前端跨域知识总结
查看>>
C# 通过 Quartz .NET 实现 schedule job 的处理
查看>>
关于java之socket输入流输出流可否放在不同的线程里进行处理
查看>>
目前为止用过的最好的Json互转工具类ConvertJson
查看>>
[Linux内存]linux内存学习(二)——分段和分页
查看>>
XHTML学习要点
查看>>
JavaScript的学习要点
查看>>
我用到的 Linq 扩展方法
查看>>
18.1 线程简介
查看>>
C# 命令行解析
查看>>
Day13
查看>>
[leedcode 08]String to Integer (atoi)
查看>>
tensorflow saver简介+Demo with linear-model
查看>>