- 浏览: 326738 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
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 1504一篇不错的关于php插件 ... -
九个PHP很有用的函数
2010-08-09 12:10 1365下面是九个PHP中很有用的功能,不知道你用过了吗? 1. 函 ... -
百万级PHP网站架构工具箱
2010-08-09 11:08 1691在了解过世界最大的PHP站点,Facebook的后台技术后,今 ... -
图片服务器和WEB应用服务器相分离的简单方案
2010-08-06 12:45 8721只是简单说明一下原理,其它的自己探索吧:) 一、两个域名:w ... -
MongoDB PHP API 及用法
2010-04-06 13:00 9622上篇说过如何安装php - Mongo扩展,现在说一下Mong ... -
从魔兽看PHP设计模式
2009-11-03 16:35 989前段时间看到有人用魔 ... -
PHP开发部分关键词
2009-10-19 10:07 1111从别人那里看到,能学习到一半的话,已经是很不错了,加油 th ... -
ICE-高效的中间件平台,牛刀小试
2009-08-17 10:48 1419ICE 看起来是个好东西! ... -
今天无事,就试试一个php datagrid
2009-08-15 09:42 2024先贴代码: <?php include ... -
php字符过滤
2009-08-05 09:35 1541MYSQL特殊字符:mysql_escape_string() ... -
PHP缓存加速器:eAccelerator
2009-07-30 14:24 2320eAccelerator README for Linux 简 ... -
讲讲php的魔术方法
2009-07-30 09:49 1365PHP5.0后,php面向对象提成更多方法,使得php更加的强 ... -
(一)PHP设计模式之工厂模式
2009-07-27 14:24 978工厂模式在规模较小的环境中似乎有些大材小用。不过,最好还是学习 ... -
PHP的5种常见的设计模式
2009-07-27 14:22 10011.工厂模式 2.单例模式 也叫单元素模式 3.观察者模式 4 ... -
基于Sphinx+MySQL的千万级数据全文检索(搜索引擎)架构设计
2009-07-21 12:36 1848前言:本文阐述的是一款经过生产环境检验的千万级数据全文检索(搜 ... -
amf使用简介
2009-07-13 16:07 2641最近需要用到amf 与flex ... -
Memcached在大型网站中应用
2009-06-25 09:45 1506memcached是一个高性能的分布式的内存对象缓存系统,通过 ... -
php 使用socket 与c通讯
2009-06-22 18:19 1317今天需要和c,进行通讯!!c程序员写了一个接口,我需要 ... -
PHP几个数组函数的区别
2009-06-17 10:10 1260刚才用到了数组合并的函数,去看了手册,现在记录下来他们的区别: ...
相关推荐
"PHP实现多服务器session共享之memcache共享"的主题着重于如何在多台服务器之间有效地存储和同步用户的session数据,以确保用户在不同服务器间的会话状态能够保持一致。本文将深入探讨这一主题,并围绕相关知识点...
总结,通过memcache实现PHP的多服务器session共享,可以有效解决分布式系统中的用户状态同步问题,提高系统的可扩展性和稳定性。然而,这也需要开发者对memcache、PHP配置以及网络通信有深入的理解,以便在实际应用...
将Session数据存储在memcache中,可以让多台服务器通过网络访问同一个Session,实现Session共享。在PHP中,可以使用`memcached`扩展来操作memcache。例如,`SessionMemcache.php`文件可能包含了以下代码: ```php $...
通过这种方式,无论用户请求哪个服务器,只要Session ID相同,服务器都能从Memcache中获取到相应的Session数据,从而实现跨服务器Session共享。 这种方案的优点在于,Memcache的分布式特性可以轻松地扩展到更多的...
为了解决这个问题,我们可以利用memcache(或其升级版memcached)来实现session的存储和共享,从而达到session跨服务器跨域的目的。本文将详细介绍如何基于memcache实现PHP的session方法重写。 首先,memcache是一...
本文将探讨在ThinkPHP框架下,如何利用Memcache作为session存储机制,来实现在多域名环境下的session数据共享。 首先,我们要理解的是,session是Web应用程序中用于保持用户状态的一种机制。通常,PHP默认将session...
**三、动机:多服务器session信息共享** 在大型Web系统中,通常会将不同业务部署在不同的服务器上。为了跨服务器共享session数据,可以使用像Memcache这样的分布式缓存系统。当用户在任何服务器上登录后,其session...
在Session共享的场景中,可以将Session数据存储在Memcached中,实现多服务器间的Session共享。 - 构建Memcached服务涉及安装Memcached软件、配置服务端,以及在应用程序中集成Memcached客户端库,例如在PHP中使用`...
2. **会话管理**: 利用memcache进行会话数据的存储,不仅可以避免单一服务器的会话数据丢失风险,还能实现多服务器环境下的会话共享,增强应用的可扩展性和灵活性。 3. **配置调优**: 通过细致调整memcache在PHP.ini...
为什么要session共享? 现在稍微大一点的网站基本上都有好几个子域名,比如www.xz577.com, xz577.com, vip.xz577.com,这些网站如果需要共用用户登录信息,那么就需要做到session共享,当然前提是有相同的主域名。 ...
session.save_path则指定了memcache服务器的位置,格式为tcp://服务器地址:端口号,如果是多个memcache服务器地址,以逗号分隔。 第二种方法是在PHP脚本中使用ini_set函数动态设置session的相关配置。这种方法的...
主要介绍了PHP实现分布式memcache设置web集群session同步的方法,结合实例形式分析了php设置与使用memcache实现web集群session同步的相关操作技巧与注意事项,需要的朋友可以参考下
- Session共享:跨服务器共享用户Session,实现负载均衡。 - 缓存动态内容:对于计算密集型或数据库查询密集型的页面,可以预先计算并缓存结果。 8. **与其他缓存技术的比较** - Memcache相比Redis,更简单、轻...
这种方式不仅减少了磁盘I/O,还能在多服务器环境中实现会话共享,提升用户体验。 2. **数据库查询缓存**:对于频繁执行的SQL查询,将结果缓存在Memcache中,可以显著减少对数据库的请求,提高系统性能。例如,当...
- 支持集群:可以实现跨服务器共享Session,提高系统的可用性和扩展性。 - **潜在问题**: - 连接数限制:虽然解决了文件锁定问题,但如果Web服务器上存在大量的长时间运行脚本,仍然会导致Memcache或Redis的连接...
3. **session共享**:在分布式环境中,可以使用Memcache共享用户session,避免session复制导致的性能下降。 4. **API调用缓存**:对于慢速的外部API调用,可以先将其结果缓存,减少网络延迟。 ### 五、操作示例 ...
企业级的Memcached部署是构建高可用、高性能Web服务的关键环节之一,特别是在session共享的场景下,Memcached能有效缓解数据库的压力,提高系统的响应速度。本文将详细介绍如何在Linux环境中进行企业级Memcached的...