yii 操作session和cookie
2013-12-16 17:15
459 查看
一,在Yii中使用session
1,CHttpSession
与原生态php5的session使用差别是,php5使用session_start();$_session['key'] = $value;在yii中,session已经被封装,所以你不需要像标准PHP代码那样使用session_start(),在Yii框架中,autoStart 属性缺省被设置为true,所以,虽然没有使用session_start(),你仍然可以使用$_SESSION全局变量,但最好使用Yii框架封装的Yii::app->session:
设置session变量:
Yii::app()->session['var']='value';
使用: echo Yii::app()->session['var'];
移除: unset(Yii::app()->session['var']);
更为复杂一点的使用时如何配置你的session
配置项可设在 protected/config/main.php的components中:
'session'=>array( 'autoStart'=>false(/true), 'sessionName'=>'Site Access', 'cookieMode'=>'only', 'savePath'='/path/to/new/directory', ),
/***** 方式一、实例添加 *****/ $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)
一个实例,
$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();前
$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
将session保持在数据库的设置: CDbHttpSession继承自 CHttpSession ,把session数据存储在数据库中(表名是YiiSession),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.
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中配置
'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。
实例:
// 检索一个名为$name的cookie值 $cookie=Yii::app()->request->cookies[$name]; $value=$cookie->value; ...... // 设置一个cookie $cookie=new CHttpCookie($name,$value); Yii::app()->request->cookies[$name]=$cookie;
相关文章推荐
- 解析PHP的Yii框架中cookie和session功能的相关操作
- yii cookie ,session 操作
- Yii cookie session 操作
- 解析PHP的Yii框架中cookie和session功能的相关操作
- YII中Session操作!
- yii操作cookie实例简介
- Django中的Cookie和Session操作以及CBV
- Yii cookie与session使用
- Yii中session的操作
- yii 操作session
- servlet中cookie和session操作
- yii 操作cookie
- YII用户注册和用户登录(五)之进行session和cookie分析 ,并在前后区分session和cookie
- PHP操作Session和Cookie
- yii操作session实例简介
- yii 2.0 session与cookie的使用
- Yii2.0 的COOKIE和SESSION用法
- yii 操作session
- YII 中session和cookie的用法
- PHP session和cookie的操作及使用