yii 操作session和cookie

一,在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;  

 

 

 

你可能感兴趣的:(session)