为什么80%的码农都做不了架构师?>>>   

Session驱动是指Session在thinkphp中的存储驱动,通过不同的方式,可以将Session存储在不同的“容器”中 对Session有兴趣的的朋友可以查阅相关资料,本篇仅针对thinkphp的session驱动进行讲解 一、DB驱动 知识点: 1、thinkphp框架默认DB驱动调用 2、SessionDB驱动库调用详解 3、创建DB驱动数据表tb_session 4、验证session自动生成 1、thinkphp框架默认DB驱动调用 如果在不设置任何驱动的情况下,windows会存储在wamp/tmp/目录下,linux会存储在/tmp/目录下,文件名都以"sess_"为前缀 其实说调用只是让DB类生效,作为Session的默认存储方式 配置方法是在message/admin/Conf/config.php文件中加入

'SESSION_TYPE' => 'Db',

即可,这样DB驱动就配置完成了 2、SessionDB驱动库调用详解 很多朋友估计跟我一样,配置完了发现自己好像什么都没明白,于是就要挖根究底,找到了调用DB驱动类的方法 首先找到框架默认函数文件在ThinkPHP框架目录下Common/functions.php 找到session管理函数段 重点代码如下:

//以下内容就是查找驱动类的判断if(C('SESSION_TYPE')) { // 读取session驱动//我们设置的是Db类型$class = 'Session'. ucwords(strtolower(C('SESSION_TYPE')));//$class在这里经过处理最终为SessionDb// 检查驱动类if(require_cache(EXTEND_PATH.'Driver/Session/'.$class.'.class.php')) {//这个判断会找到Extend/Driver/Session/SessionDb.class.php$hander = new $class();$hander->execute();}else {// 类没有定义throw_exception(L('_CLASS_NOT_EXIST_').': ' . $class);}}

文件位置在ThinkPHP框架目录下Extend/Driver/Session/SessionDb.class.php Session相关操作具体内容就不在这里讲解了 3、创建DB驱动数据表tb_session 创建这个表无需我们手动去建表,在SessionDb.class.php的开始部分,就有一段已经编写好的sql 复制那段sql,并且修改为如下:

CREATE TABLE tb_session (session_id varchar(255) NOT NULL,session_expire int(11) NOT NULL,session_data blob,UNIQUE KEY `session_id` (`session_id`));

在数据库中执行即可创建成功 4、验证session自动生成 经过以上步骤,Session驱动已经全部设置完毕 接下来我们要验证Session是否正确生成了 验证方法其实很简单,就是登录以后,查看tb_session数据表中是否生成了对应的session记录即可 另:由于session_data为二进制数据,所以无法直接在数据库中查看,可通过程序查出,并通过print_r即可全部显示 简易验证方法在IndexAction.class.php中加入如下代码:

$session=M('session')->find();
print_r($session);

二、Redis驱动 知识点: 1、初识Redis及Redis在Windows下的安装和使用 2、Redis驱动配置 3、Redis驱动使用 4、Redis驱动验证 1、初识Redis及Redis在Windows下的安装和使用 http://www.newasp.net/soft/67186.html#downloads 下载解压,根据自己的操作系统打开相应的目录 双击redis-server.exe 即可开启redis服务 2、Redis驱动配置 在massage/admin/Conf/config.php中添加如下配置: //Session相关配置

'SESSION_PREFIX' => 'Sess_',
'SESSION_TYPE' => 'Redis',
//Redis相关配置
'REDIS_HOST' => '127.0.0.1',
'REDIS_PORT' => '6379',

以上配置中,除了SESSION_PREFIX以外,其他配置都是必须要设置的 这里要特别说明下,本地化支持 如果在初始化session设置的时候传入prefix参数或者单独设置了SESSION_PREFIX参数的话,就可以启用本地化session管理支持。启动本地化session后,所有的赋值、取值、删除以及判断操作都会自动支持本地化session。 本地化session支持开启后,生成的session数据格式由原来的 $_SESSION['name'] 变成 $_SESSION['前缀']['name'] 假设前缀设置为think,则赋值操作: session('name','value'); //设置session 相当于: $_SESSION['think']['name'] = 'value'; 取值操作: $value = session('name'); 相当于使用: $value = $_SESSION['think']['name']; 删除操作: session('name',null); 相当于: unset($_SESSION['think']['name']); 清空操作: session(null); 相当于: unset($_SESSION['think']); 判断操作: session('?name'); 相当于: isset($_SESSION['think']['name']); 参考: http://www.thinkphp.cn/simple/functions_session.html 3、Redis驱动使用 基于SessionDb.class.php,在ThinkPHP框架目录(message/ThinkPHP/Extend/Driver/Session/)中,新建SessionRedis.class.php 代码如下:

<?php
//自定义redis处理 驱动
Class SessionRedis {//  REDIS连接对象Private $redis;//  SESSION有效时间Private $expire;//   functions.php有定义默认执行方法为execute//    具体代码可参考Common/functions.php中,搜索session,可查询到相关session自动执行的方法Public function execute () {session_set_save_handler(array(&$this,"open"),array(&$this,"close"),array(&$this,"read"),array(&$this,"write"),array(&$this,"destroy"),array(&$this,"gc"));}//打开SessionPublic function open ($path, $name) {$this->expire = C('SESSION_EXPIRE') ? C('SESSION_EXPIRE') : ini_get('session.gc_maxlifetime');$this->redis = new Redis();return $this->redis->connect(C('REDIS_HOST'),C('REDIS_PORT'));}Public function close () {return $this->redis->close();}Public function read ($id) {$id = C('SESSION_PREFIX') . $id;$data = $this->redis->get($id);return $data ? $data : '';}//写入sessionPublic function write ($id, $data) {$id = C('SESSION_PREFIX') . $id;return $this->redis->set($id, $data, $this->expire);}// 销毁SESSIONPublic function destroy ($id) {$id = C('SESSION_PREFIX') . $id;return $this->redis->delete($id);}Public function gc ($maxLifeTime) {return true;}
}

接下来只要任何的Session操作,都会在Redis中记录相关记录 PS:在开始使用Redis之前,先要找到php_redis.dll扩展,否则会出现 Class 'Redis' not found 这样的提示 Win7下64位系统可能还需要手动编译下才能加载成功 具体方法可参考: http://hi.baidu.com/rendong/item/c9cbacc289a4a4340831c60b 4、Redis驱动验证 先来写入一些Session吧,由于之前的登录操作都有用到Session相关操作,那么我们就直接查看存入和读取的内容即可 打开redis-cli.exe 输入keys * 默认是为空的 这时候我们进入http://localhost/message/admin.php 完成一次登录操作 这时候再输入keys * 即可看到最新产生的Session

Sess_vf1egakhgkv9s6tq7uo480eo02

输入get Sess_vf1egakhgkv9s6tq7uo480eo02 即可看到相关的session信息

redis 127.0.0.1:6379> get Sess_vf1egakhgkv9s6tq7uo480eo02
"Sess_|a:5:{s:6:\"verify\";s:32:\"6a182a16e66268d7ce85fcfe945df787\";s:3:\"uid\"
;s:1:\"1\";s:8:\"username\";s:5:\"admin\";s:9:\"logintime\";s:19:\"2014-03-09 23
:37:43\";s:7:\"loginip\";s:9:\"127.0.0.1\";}"

PS:由于启用了SESSION_PREFIX 这时候要查看相关的SESSION信息 要用如下方式来查看$_SESSION[C('SESSION_PREFIX')]['uid'] 三、Memcache驱动 知识点: 1、初识Memcache及Memcache在Windows下的安装和使用 2、Memcache驱动配置 3、Memcache驱动使用 4、Memcache驱动验证 1、初识Memcached及Memcache在Windows下的安装和使用 Memcached和Redis一样,是个key-value的nosql容器 还需要注意Memcached是memcache的服务端,而memcache,一般是指memcache的客户端 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。但是它并不提供冗余(例如,复制其hashmap条目);当某个服务器S停止运行或崩溃了,所有存放在S上的键/值对都将丢失。 Memcached官方: http://danga.com/memcached/ 关于Memcached的介绍请参考:Memcached深度分析 下载Windows的Server端 下载地址: http://code.jellycan.com/memcached/ 安装Memcache Server(也可以不安装直接启动) 1. 下载memcached的windows稳定版,解压放某个盘下面,比如在c:\memcached 2. 在CMD下输入 "c:\memcached\memcached.exe -d install" 安装. 3. 再输入:"c:\memcached\memcached.exe -d start" 启动。NOTE: 以后memcached将作为windows的一个服务每次开机时自动启动。这样服务器端已经安装完毕了。 如果下载的是二进制的版本,直接运行就可以了,可以加上参数来加以设置。 常用设置: -p 监听的端口 -l 连接的IP地址, 默认是本机 -d start 启动memcached服务 -d restart 重起memcached服务 -d stop|shutdown 关闭正在运行的memcached服务 -d install 安装memcached服务 -d uninstall 卸载memcached服务 -u 以的身份运行 (仅在以root运行的时候有效) -m 最大内存使用,单位MB。默认64MB -M 内存耗尽时返回错误,而不是删除项 -c 最大同时连接数,默认是1024 -f 块大小增长因子,默认是1.25 -n 最小分配空间,key+value+flags默认是48 -h 显示帮助 要在windows下让php支持memcache是需要下载对应的dll http://www.com133.com/11 这里有对应版本的下载,大家可以根据版本自行下载 2、Memcache驱动配置 修改掉之前的Redis配置 在Conf/config.php中添加

//Memcache
'SESSION_TYPE' => 'Memcache',
//Memcache服务器
'MEMCACHE_HOST' => '127.0.0.1',
//Memcache端口
'MEMCACHE_PORT' => '11211',

3、Memcache驱动使用 将原来Redis驱动复制为SessionMemcache.class.php 位置依然在message/ThinkPHP/Extend/Driver/Session/SessionMemcache.class.php 代码如下:

<?php
//自定义memcache处理 驱动
Class SessionMemcache {//   memcache连接对象Private $memcache;//    SESSION有效时间Private $expire;Public function execute () {session_set_save_handler(array(&$this,"open"),array(&$this,"close"),array(&$this,"read"),array(&$this,"write"),array(&$this,"destroy"),array(&$this,"gc"));}//打开SessionPublic function open ($path, $name) {$this->expire = C('SESSION_EXPIRE') ? C('SESSION_EXPIRE') : ini_get('session.gc_maxlifetime');$this->memcache = new Memcache();return $this->memcache->connect(C('memcache_HOST'),C('memcache_PORT'));}Public function close () {return $this->memcache->close();}Public function read ($id) {$id = C('SESSION_PREFIX') . $id;$data = $this->memcache->get($id);return $data ? $data : '';}//写入sessionPublic function write ($id, $data) {$id = C('SESSION_PREFIX') . $id;return $this->memcache->set($id, $data, $this->expire);}//销毁SESSIONPublic function destroy ($id) {$id = C('SESSION_PREFIX') . $id;return $this->memcache->delete($id);}Public function gc ($maxLifeTime) {return true;}
}

添加如上代码后,即配置驱动完成,其他程序代码无需修改 接下来就是验证了 4、Memcache驱动验证 Memcache测试方法比Redis相对要复杂一些,需要掌握一些Memcache内置的命令 由于这个例子我觉得有其他用途,所以专门写了篇文章,有需要的朋友可以自行查看 具体操作参见 http://www.ttlsa.com/memcache/memcache-list-all-keys/

转载于:https://my.oschina.net/766/blog/211179

(五)ThinkPHP实践之Session驱动-TTLSA相关推荐

  1. php5.5 session,(五)ThinkPHP实践之Session驱动-TTLSA

    Session驱动是指Session在thinkphp中的存储驱动,通过不同的方式,可以将Session存储在不同的"容器"中 对Session有兴趣的的朋友可以查阅相关资料,本篇 ...

  2. think php框架 跨域,ThinkPHP框架实现session跨域问题

    这篇文章主要介绍了ThinkPHP框架实现session跨域问题的解决方法,需要的朋友可以参考下 ThinkPHP的session跨域问题很多开发者都遇到过! 其实不管是ThinkPHP还是php本身 ...

  3. 从零开始使用CodeArt实践最佳领域驱动开发(三)

    5.领域模型设计 在开始考虑如何构建账户子系统的领域模型之前,我们先来看看关于CA里领域模型的基本概念.初次接触这些陌生的概念确实会一知半解,不过没有关系,大家实践几次领域设计后就会融会贯通,深刻体会 ...

  4. linux驱动:音频驱动(五)ASoc之codec驱动

    linux驱动:音频驱动(五)ASoc之codec驱动

  5. python可以开发驱动吗_Python机器学习实践:测试驱动的开发方法

    Python机器学习实践:测试驱动的开发方法 作者:(美)马修·柯克(Matthew Kirk) 著 出版日期:2017年10月 文件大小:30.91M 支持设备: ¥40.00在线试读 适用客户端: ...

  6. 韦东山 IMX6ULL和正点原子_正点原子Linux第五十七章Linux MISC驱动实验

    1)资料下载:点击资料即可下载 2)对正点原子Linux感兴趣的同学可以加群讨论:935446741 3)关注正点原子公众号,获取最新资料更新 第五十七章Linux MISC驱动实验 misc的意思是 ...

  7. Servlet之session实践:session实现简易购物车

    文章目录 Servlet之session实践:session实现简易购物车 1 过程分析 1.1 Product类:存储商品信息 1.2 ShoppingItem类:存储购买条目信息 1.3 Shop ...

  8. ZYNQ系列(五) ZYNQ下的驱动开发

    ZYNQ系列(五) ZYNQ下的驱动开发 第一章 Petalinux创建工程 第二章 Petalinux-config配置说明 第三章 QSPI自启动工程 第四章 将文件打包进文件系统 第五章 将文件 ...

  9. 第五章 系统方法---------基于业务驱动的企业安全架构(翻译,原作者John Sherwood)----仅学习使用

    第 5 章:系统方法 安全架构的合理合理设计是通过采用系统方法来实现的. 这将确保最终结果与业务需求一致,并确保设计过程得到正确执行. 本书所提倡的系统方法基于成熟的系统工程原则. 在本章中,您将了解 ...

  10. Linux环境thinkphp配置以及数据源驱动修改

    项目中需要用到thinkphp,以下简称tp. linux版本:64位CentOS 6.4 Nginx版本:nginx1.8.0 php版本:php5.5.28 thinkphp版:3.2.3 1.安 ...

最新文章

  1. swoole 定时器
  2. C++ 面向对象的三大特性和五个原则?
  3. Oracle监听的静态注册和动态注册
  4. 特斯拉为何使用.NET 技术栈?
  5. 空间插值方法对比整理
  6. 欧姆字符的编码c语言,《编码:隐匿在计算机软硬件背后的语言》读书笔记
  7. NodeJs从零构建代理ip池(一)介绍
  8. 26.Yii 模块(2)
  9. systemd 编写微信鱼虾蟹棋牌搭建服务管理脚本
  10. php数字验证码代码,php中文字母数字验证码实现代码
  11. [虚树dp] bzoj2286: Sdoi2011消耗战
  12. redis 删除操作命令
  13. Windows 更新 升级 8007003错误 800tb109错误 文件没有正确签名 很难确定你的电脑能否运行win10【解决方法】
  14. 基于Wiki的知识共享平台模型架构
  15. Problem D: 求三角形面积-gyy
  16. 51单片机、STM32中生成QRCode二维码
  17. Git 推送命令报错
  18. Python 用turtle库画八卦
  19. 大数据时代的Serverless工作负载预测赛后总结
  20. APP功能测试点(全)

热门文章

  1. LODOP批量打印多页模版进行维护
  2. 第05课 Linux命令初探(一)
  3. Luogu P2068 统计和
  4. python中map()函数的用法讲解
  5. [基础知识]在PeopleSoft中SMTP设置不生效如何查找问题
  6. linux 7- - watch,free,mpstat,vmstat,iostat,pidstat,df,du
  7. 被Json格式化后那可怜的时间
  8. ASP入门基础教程-VBScript概述及基本元素
  9. Farrago for Mac(强大的现场多音频播放工具)
  10. Mac新手入门教学:活用Mac通知中心,生活讯息一眼看尽