`
zccst
  • 浏览: 3323128 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

在yii中使用session和cookie

    博客分类:
  • YII
 
阅读更多
作者:zccst


2014-6-10
yii 操作session
http://blog.sina.com.cn/s/blog_664c9f650100yqkt.html





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

/***** 方式一、实例添加 *****/
$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
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.

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;



如果您觉得本文的内容对您的学习有所帮助,您可以微信:
分享到:
评论

相关推荐

    Yii2.0中的COOKIE和SESSION用法

    在Yii2.0框架中,Cookie和Session是两种常见的用户数据存储机制,它们在Web应用程序中扮演着重要的角色。下面将详细介绍这两种机制的使用方法。 ### Cookie **1. 添加Cookie** Cookie在Yii2中主要通过`yii\web\...

    Yii框架Session与Cookie使用方法示例

    在Yii框架中使用Session和Cookie,可以通过一些内置的方法和组件来实现。Session管理着用户在服务器端的会话状态,而Cookie则用于在客户端存储少量数据,常用于保存用户偏好或者跟踪用户信息等。 在标题中提到的...

    Yii2下session跨域名共存的解决方案

    在Yii2框架中,实现session跨域名共存的主要目的是确保用户在一个网站登录后,其他关联的网站也能识别其登录状态。这通常涉及到两个核心问题:一是确保客户端(浏览器)能够访问同一个sessionId,二是确保所有涉及的...

    yii2swoole让yii2运行在swoole上

    它提供了在Swoole环境下运行Yii2的基础设施,包括请求处理、事件监听、session和cookie管理等。 2. **性能提升**:"运行在swoole上的yii2是运行在php-fpm上yii2的5倍以上"表明使用Swoole后,Yii2应用的处理速度和...

    Yii框架学习笔记之session与cookie简单操作示例

    在Yii框架中操作Session和Cookie是实现Web应用交互和用户状态管理的重要方面。通过本篇笔记,我们可以了解到Yii框架中如何进行Session和Cookie的初始化、读写、删除等基础操作。掌握这些知识对于开发安全、高效的Web...

    Yii框架操作cookie与session的方法实例详解

    在实际开发中,了解Yii框架下cookie和session的操作对于数据持久化和用户状态管理是非常有帮助的。开发人员在使用Yii框架进行开发时,往往需要处理用户的登录状态、网站浏览偏好等信息。对于登录状态的管理,通常...

    在yii中新增一个用户验证的方法详解

    在一些情况下,例如网站的会员管理中心与普通用户的访问需要区分对待,就可能需要为前台会员提供一个独立的登录验证机制,并且要将相关信息存储在不同的session或cookie中。 Yii框架中的用户验证主要通过实现...

    session入redis

    通常,服务器会在用户登录时创建一个唯一的Session ID,并通过cookie或其他方式发送给客户端浏览器。客户端在后续的每次请求中都会携带这个Session ID,服务器据此识别用户身份并从服务器端存储的Session数据中恢复...

    yii操作session实例简介

    在Yii框架中使用Session变量的方法与在全局数组$_SESSION中使用类似,但更为安全和规范。设置Session变量的代码如下: ```php Yii::app()-&gt;session['var']='value'; ``` 读取Session变量的代码如下: ```php echo ...

    Yii2中cookie用法示例分析

    在登录时,用户的身份信息可以加密存储在cookie中,以便在随后的请求中自动恢复用户状态。 综上所述,Yii2框架为开发者提供了丰富的工具和选项来管理cookie,使得开发者可以在保证应用功能的同时,也能够确保数据的...

    yii-sae-app

    这意味着开发者可能需要了解两者的结合使用,如Yii的自动加载机制、SAE的API调用、如何处理session和cookie等特定于SAE的问题。 最后,压缩包中的“myapp-master”可能是项目的源代码仓库,包含Yii项目的主目录。在...

    YII2自动登录Cookie总是失效的解决方法

    开发者检查了源码和Cookie设置,并确认Cookie内容没有问题,同时,Yii2的session ID在浏览器中也显示正常,说明问题可能出在数据传输过程中。 关键的发现是,在调用`$model-&gt;login()`方法后,程序直接返回了JSON...

Global site tag (gtag.js) - Google Analytics