- 浏览: 321115 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
ljl961890233bear:
...
利用MySQL Cluster 7.0 + LVS 搭建高可用环境 -
wang1352083:
$m->listDBs(); 返回的是一个有dbnam ...
MongoDB PHP API 及用法 -
走忽闪953:
...
putty PasswordAuthentication -
jxhgzs001:
很好 很强大,不顶你一下 觉得过意不去啊
cocos2d 的一些实用代码 -
lingtianlan:
我实际测试的结果却和你不一样,调用顺序是awakeFromNi ...
[转]loadView/viewDidLoad/initWithNibName/awakeFromNib/initWithCoder的用法
再自定义一套session处理机制,关于session的实现方法我就不再多讲,直接贴程序了。
然后,在项目程序的头文件中直接包含 MemacheSession.inc.php 即可,并且以前的程序不用做任何改动。
特别感谢:黑夜路人 的 实现基于Memcache存储的Session类。
备注:memcache PECL 未来版本中,可以直接设置 php.ini 来这定自己的 session.save_handler,大致如下:
<?php /* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */ //=========================================== // 程序: Memcache-Based Session Class // 功能: 基于Memcache存储的 Session 功能类 // 作者: yejr // 网站: http://imysql.cn // 时间: 2007-01-05 //=========================================== /** * 文件: MemcacheSession.inc.php * 类名: MemcacheSession Class * 功能: 自主实现基于Memcache存储的 Session 功能 * 描述: 这个类就是实现Session的功能,基本上是通过 * 设置客户端的Cookie来保存SessionID, * 然后把用户的数据保存在服务器端,最后通过 * Cookie中的Session Id来确定一个数据是否是用户的, * 然后进行相应的数据操作 * * 本方式适合Memcache内存方式存储Session数据的方式, * 同时如果构建分布式的Memcache服务器, * 能够保存相当多缓存数据,并且适合用户量比较多并发比较大的情况 * * 注意: 本类必须要求PHP安装了Memcache扩展或者必须有Memcache的PHP API * 获取Memcache扩展请访问: http://pecl.php.net */ //设定 SESSION 有效时间,单位是 秒 define('SESS_LIFTTIME', 3600); //定义memcache配置信息 define('MEMCACHE_HOST', 'localhost'); define('MEMCACHE_PORT', '10000'); if (!defined('MemcacheSession')) { define('MemcacheSession', TRUE); class MemacheSession { // {{{ 类成员属性定义 static $mSessSavePath; static $mSessName; static $mMemcacheObj; // }}} // {{{ 初始化构造函数 /** * 构造函数 * * @param string $login_user 登录用户 * @param int $login_type 用户类型 * @param string $login_sess 登录Session值 * @return Esession */ public function __construct() { //我的memcache是以php模块的方式编译进去的,可以直接调用 //如果没有,就请自己包含 Memcache-client.php 文件 if (!class_exists('Memcache') || !function_exists('memcache_connect')) { die('Fatal Error:Can not load Memcache extension!'); } if (!empty(self::$mMemcacheObj) && is_object(self::$mMemcacheObj)) { return false; } self::$mMemcacheObj = new Memcache; if (!self::$mMemcacheObj->connect(MEMCACHE_HOST , MEMCACHE_PORT)) { die('Fatal Error: Can not connect to memcache host '. MEMCACHE_HOST .':'. MEMCACHE_PORT); } return TRUE; } // }}} /** {{{ sessOpen($pSavePath, $name) * * @param String $pSavePath * @param String $pSessName * * @return Bool TRUE/FALSE */ public function sessOpen($pSavePath = '', $pSessName = '') { self::$mSessSavePath = $pSavePath; self::$mSessName = $pSessName; return TRUE; } // }}} /** {{{ sessClose() * * @param NULL * * @return Bool TRUE/FALSE */ public function sessClose() { return TRUE; } // }}} /** {{{ sessRead($wSessId) * * @param String $wSessId * * @return Bool TRUE/FALSE */ public function sessRead($wSessId = '') { $wData = self::$mMemcacheObj->get($wSessId); //先读数据,如果没有,就初始化一个 if (!empty($wData)) { return $wData; } else { //初始化一条空记录 $ret = self::$mMemcacheObj->set($wSessId, '', 0, SESS_LIFTTIME); if (TRUE != $ret) { die("Fatal Error: Session ID $wSessId init failed!"); return FALSE; } return TRUE; } } // }}} /** {{{ sessWrite($wSessId, $wData) * * @param String $wSessId * @param String $wData * * @return Bool TRUE/FALSE */ public function sessWrite($wSessId = '', $wData = '') { $ret = self::$mMemcacheObj->replace($wSessId, $wData, 0, SESS_LIFTTIME); if (TRUE != $ret) { die("Fatal Error: SessionID $wSessId Save data failed!"); return FALSE; } return TRUE; } // }}} /** {{{ sessDestroy($wSessId) * * @param String $wSessId * * @return Bool TRUE/FALSE */ public function sessDestroy($wSessId = '') { self::sessWrite($wSessId); return FALSE; } // }}} /** {{{ sessGc() * * @param NULL * * @return Bool TRUE/FALSE */ public function sessGc() { //无需额外回收,memcache有自己的过期回收机制 return TRUE; } // }}} /** {{{ initSess() * * @param NULL * * @return Bool TRUE/FALSE */ public function initSess() { $domain = '.imysql.cn'; //不使用 GET/POST 变量方式 ini_set('session.use_trans_sid', 0); //设置垃圾回收最大生存时间 ini_set('session.gc_maxlifetime', SESS_LIFTTIME); //使用 COOKIE 保存 SESSION ID 的方式 ini_set('session.use_cookies', 1); ini_set('session.cookie_path', '/'); //多主机共享保存 SESSION ID 的 COOKIE ini_set('session.cookie_domain', $domain); //将 session.save_handler 设置为 user,而不是默认的 files session_module_name('user'); //定义 SESSION 各项操作所对应的方法名: session_set_save_handler( array('MemacheSession', 'sessOpen'), //对应于静态方法 My_Sess::open(),下同。 array('MemacheSession', 'sessClose'), array('MemacheSession', 'sessRead'), array('MemacheSession', 'sessWrite'), array('MemacheSession', 'sessDestroy'), array('MemacheSession', 'sessGc') ); session_start(); return TRUE; } // }}} }//end class }//end define $memSess = new MemacheSession; $memSess->initSess(); ?>
然后,在项目程序的头文件中直接包含 MemacheSession.inc.php 即可,并且以前的程序不用做任何改动。
特别感谢:黑夜路人 的 实现基于Memcache存储的Session类。
备注:memcache PECL 未来版本中,可以直接设置 php.ini 来这定自己的 session.save_handler,大致如下:
session.save_handler = memcache session.save_path = "tcp://host:port?persistent=1&weight=2&timeout=2&retry_interval=15,tcp://host2:port2"
发表评论
-
she
2013-03-27 22:43 0把申购和收货纳入资产 ... -
PHP中插件机制的一种实现方案
2010-11-26 18:42 1452一篇不错的关于php插件 ... -
九个PHP很有用的函数
2010-08-09 12:10 1320下面是九个PHP中很有用的功能,不知道你用过了吗? 1. 函 ... -
百万级PHP网站架构工具箱
2010-08-09 11:08 1638在了解过世界最大的PHP站点,Facebook的后台技术后,今 ... -
图片服务器和WEB应用服务器相分离的简单方案
2010-08-06 12:45 8670只是简单说明一下原理,其它的自己探索吧:) 一、两个域名:w ... -
MongoDB PHP API 及用法
2010-04-06 13:00 9564上篇说过如何安装php - Mongo扩展,现在说一下Mong ... -
从魔兽看PHP设计模式
2009-11-03 16:35 943前段时间看到有人用魔 ... -
PHP开发部分关键词
2009-10-19 10:07 1057从别人那里看到,能学习到一半的话,已经是很不错了,加油 th ... -
ICE-高效的中间件平台,牛刀小试
2009-08-17 10:48 1387ICE 看起来是个好东西! ... -
今天无事,就试试一个php datagrid
2009-08-15 09:42 1970先贴代码: <?php include ... -
php字符过滤
2009-08-05 09:35 1500MYSQL特殊字符:mysql_escape_string() ... -
PHP缓存加速器:eAccelerator
2009-07-30 14:24 2288eAccelerator README for Linux 简 ... -
讲讲php的魔术方法
2009-07-30 09:49 1330PHP5.0后,php面向对象提成更多方法,使得php更加的强 ... -
(一)PHP设计模式之工厂模式
2009-07-27 14:24 930工厂模式在规模较小的环境中似乎有些大材小用。不过,最好还是学习 ... -
PHP的5种常见的设计模式
2009-07-27 14:22 9601.工厂模式 2.单例模式 也叫单元素模式 3.观察者模式 4 ... -
基于Sphinx+MySQL的千万级数据全文检索(搜索引擎)架构设计
2009-07-21 12:36 1787前言:本文阐述的是一款经过生产环境检验的千万级数据全文检索(搜 ... -
amf使用简介
2009-07-13 16:07 2591最近需要用到amf 与flex ... -
Memcached在大型网站中应用
2009-06-25 09:45 1456memcached是一个高性能的分布式的内存对象缓存系统,通过 ... -
php 使用socket 与c通讯
2009-06-22 18:19 1268今天需要和c,进行通讯!!c程序员写了一个接口,我需要 ... -
PHP几个数组函数的区别
2009-06-17 10:10 1223刚才用到了数组合并的函数,去看了手册,现在记录下来他们的区别: ...
相关推荐
PHP实现多服务器session共享之memcache共享
本文是 PHP实现多服务器session共享之NFS共享的延续,不过这次,我采用memcache来存储session了,memcache的安装请看这里: 搭建高效、可靠、稳定的WEB服务器
本文实例讲述了thinkPHP多域名情况下使用memcache方式共享session数据的实现方法。分享给大家供大家参考,具体如下: 一、问题起源 稍大一些的网站,通常都会有好几个服务器,每个服务器运行着不同功能的模块,使用...
一相关介绍1.memcache + memcache的多服务器数据共享的介绍,请参见http://www.guigui8.com/index.php/archives/206.html2.session机制:session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也...
为什么要session共享? 现在稍微大一点的网站基本上都有好几个子域名,比如www.xz577.com, xz577.com, vip.xz577.com,这些网站如果需要共用用户登录信息,那么就需要做到session共享,当然前提是有相同的主域名。 ...
主要介绍了PHP实现分布式memcache设置web集群session同步的方法,结合实例形式分析了php设置与使用memcache实现web集群session同步的相关操作技巧与注意事项,需要的朋友可以参考下
传统情况下php会把session存入本机的暂存档内,可是这种情况下分发了之后session就丢失了,其实最简单的解决方法就是用memcache来托管,单独架设一台服务器用来作为memcache服务器(内存最好是大一点),接下来的工
9-24 5.php文件编程④-mini文件共享网实现分析 9-24 6.PHP绘图技术 9-26 1 课程回顾 9-26 2 javascript基本介绍 9-26 3 javascript变量 标识符规范 9-26 4 javascript数据类型三大类型 9-26 5 javascript算术运算符...
9-24 5.php文件编程④-mini文件共享网实现分析 9-24 6.PHP绘图技术 9-26 1 课程回顾 9-26 2 javascript基本介绍 9-26 3 javascript变量 标识符规范 9-26 4 javascript数据类型三大类型 9-26 5 javascript算术运算符...
一个入口文件index.php也是整个项目的配置文件,可以自定义多个入口文件达到不同项目共存的目的,项目之间随意共享类库、帮助文件等目录,框架核心文件采用零侵入式编写,整个框架运行不依赖任何外部变量。...
9-24 5.php文件编程④-mini文件共享网实现分析 9-24 6.PHP绘图技术 9-26 1 课程回顾 9-26 2 javascript基本介绍 9-26 3 javascript变量 标识符规范 9-26 4 javascript数据类型三大类型 9-26 5 javascript算术运算符...
9-24 5.php文件编程④-mini文件共享网实现分析 9-24 6.PHP绘图技术 9-26 1 课程回顾 9-26 2 javascript基本介绍 9-26 3 javascript变量 标识符规范 9-26 4 javascript数据类型三大类型 9-26 5 javascript算术运算符...
9-24 5.php文件编程④-mini文件共享网实现分析 9-24 6.PHP绘图技术 9-26 1 课程回顾 9-26 2 javascript基本介绍 9-26 3 javascript变量 标识符规范 9-26 4 javascript数据类型三大类型 9-26 5 javascript算术运算符...
7、后台登录采用session+session验证码,记录所有登录历史; 8、后台管理日志记录; 9、是否允许修改模版需要有服务器文件管理权限; 10、所有菜单都需要进行权限验证; 四、性能设计: 1、缓存支持内存...
7、后台登录采用session+session验证码,记录所有登录历史; 8、后台管理日志记录; 9、是否允许修改模版需要有服务器文件管理权限; 10、所有菜单都需要进行权限验证; 四、性能设计: 1、缓存支持内存...
7、后台登录采用session+session验证码,记录所有登录历史; 8、后台管理日志记录; 9、是否允许修改模版需要有服务器文件管理权限; 10、所有菜单都需要进行权限验证; 四、性能设计: 1、缓存支持内存缓存,如:...
7、后台登录采用session+session验证码,记录所有登录历史; 8、后台管理日志记录; 9、是否允许修改模版需要有服务器文件管理权限; 10、所有菜单都需要进行权限验证; 四、性能设计: 1、缓存支持内存缓存,如:...