当前位置: 首页 > Linux学院 > 程序设计 > PHP > 如何将PHP session信息缓存到memcached里面

如何将PHP session信息缓存到memcached里面

2014-08-12 17:56 来源:阿里云 作者:余汶龙 人气指数: 我要评论
一、场景介绍
 
用户在利用PHP搭建网站时,会把一些信息存放在$_SESSION全局变量里,可以很方便的存取。在PHP的ini配置文件里面提供了[Session]相关配置,可以支持将信息存到文件或memcached服务器里面。由配置项session.save_handler = memcached决定。大多数场景,该session数据并不需要持久化,且为了提升网站性能,会选择将session信息缓存到memcached里面。
 
二、问题
 
现在问题来了,已知阿里云OCS是实现了标准memcached协议的缓存,用户一方面为了减少服务器内存占用,一方面减少对memcached的维护,希望将session的存储从自建的memcached迁移到OCS上面,且不希望改写代码。切换过程中遇到了问题,因此有了这篇文章,希望能帮到大家。
 
首先弄清OCS和自建memcached的区别,他们都实现了标准memcached协议。但OCS是分布式集群统一对外提供服务,实现了负载均衡且无单点故障,用户可自由动态弹性调整配置且无需重启服务。既然是对外提供服务,就有相应的安全机制,如白名单、流控、账号密码鉴权。这里对比自建memcached,最重要的区别就是“账号密码鉴权”,因为大多数用户自建memcached是不需要设置账号密码的,跟OCS比就少了SASL鉴权流程。那么用户将session的存储从自建的memcached迁移到OCS上面,就需要在php.ini中配置账号密码。
 
三、解决
 
1、在老版本的php memcached扩展中无法支持,需要升级php memcached扩展至2.2.0版本。重新按照阿里云OCS官网教程http://help.aliyun.com/view/11108324_13703944.html?spm=5176.7150518.1996836753.9.OZnEq0 编译扩展。步骤如下:
 
wget http://pecl.php.net/get/memcached-2.2.0.tgz
 
tar  zxvf  memcached-2.2.0.tgz
 
cd memcached-2.2.0
 
phpize
 
./configure –with-libmemcached-dir=/usr/local/libmemcached –enable-memcached-sasl
 
make
 
make install
 
2、找到刚升级memcached.so,stat命令确定下是否更新,注意下modify时间
 
如何将PHP session信息缓存到memcached里面
 
3、修改php.ini配置
 
3.1 session段
 
找到[Session]段落,修改存储引擎为:
 
session.save_handler = memcached(注意是带d扩展)
 
修改存储地址,即OCS访问地址为:
 
session.save_path = “be6b6b8221cc11e4.m.cnhzalicm10pub001.ocs.aliyuncs.com:11211″(注意带d扩展,则前面不用加tcp://,不带d的扩展需要加)
 
修改缓存到memcached的key的时间
 
session.gc_maxlifetime = 1440(单位是秒,强烈建议必须设置一个合理时间,以保证OCS始终只缓存热点数据)
 
3.2 memcached段
 
在php.ini的全局段,建一个单独段落[memcached],然后在空白地方加入下面配置
 
[memcached]
 
memcached.use_sasl = On
 
memcached.sess_binary = On
 
memcached.sess_sasl_username = “your_ocs_name”
 
memcached.sess_sasl_password = “your_ocs_password”
 
memcached.sess_locking = Off
 
安装步骤完结,上述关于memcached段和Session段其他有用参数,参考链接如下:
 
http://php.net/manual/en/memcached.configuration.php
 
http://php.net/manual/en/session.configuration.php
 
接下来是测试是否生效。
 
四、测试
 
写测试代码如下session.php
 
<?php
 
session_start();
 
$sn = session_id();
 
echo “session id:”.$sn.”\n”;
 
$_SESSION["ocs_key"]=”session_value”;
 
echo “session:”.$_SESSION["ocs_key"].”\n”;
 
?>
 
输出如下:
 
session id:ttrct9coa2q62r2sodlq4qf376
 
session:session_value
 
测试代码get.php去从OCS获取刚才session.php通过session写入的数据
 
<?php
 
$memc = new Memcached();
 
$memc->setOption(Memcached::OPT_COMPRESSION, false);
 
$memc->setOption(Memcached::OPT_BINARY_PROTOCOL, true);
 
$memc->addServer(“be6b6b8221cc11e4.m.cnhzalicm10pub001.ocs.aliyuncs.com”, 11211);
 
$memc->setSaslAuthData(“your_ocs_name”, “your_ocs_password”);
 
echo $memc->get(“memc.sess.key. ttrct9coa2q62r2sodlq4qf376″);
 
/*注意这里的key是有前缀的,由php.ini中memcached.sess_prefix字段决定,默认值为“memc.sess.key.”。然后再拼接上面打出来的sessionid“ttrct9coa2q62r2sodlq4qf376”即可。*/
 
?>
 
该代码输出如下:
 
    ocs_key|s:13:”session_value”;
 
即PHP SESSION已经成功写入OCS。
为您推荐: PHP memcached Session 信息缓存
大家感兴趣的内容
小伙伴最爱的新闻
小伙伴还关注了以下信息
小伙伴关注的焦点

小伙伴都在关注的热门词

新服 缤纷活动 航海世纪 芈月传 暗黑道具 萌乐网 苹果发布会 最新谍照 三国令 剑雨江湖 怎样修炼战骑 页游 怎样修炼伙伴 木甲世界 仙侠道2 推黑科技 页游模式 武圣试炼场 街机玩法 蓝月传奇 个人BOSS玩法 哥们网 九阴绝学 仗剑出鞘 全新模式 范伟打天下 全新元神玩法 七大神兵简介 新手攻略 跑腿任务 门派五行 城战礼包 页游界 泥石流 傅园慧 经典网页游戏 耐玩 盘点 玉石攻略 提升角色 大黑 实装属性 神兵攻略 问鼎莽荒 莽荒纪 手持神兵 土豪梦 万世 开学清单 财富赚不停 天书世界 大黑游戏 资源战场 ppwan 天问 激战 全国大战 雄霸一方 新增宠物技能 绝对小能手 花千骨 三尾章鱼 风色轨迹 双枪手 弑之神 缤纷好礼 惊喜六重连 帮会 中秋福利 自制月饼 九阴真经 玩家 五周年纪念 纪念银币 名动三界 新服资料片 画江山 勇战妖魔 邪恶势力 上古降魔 老司机玩法 坐骑揭秘 黑科技 竞技场攻略 铁血皇城 披风玩法 书剑恩仇录 装备强化攻略 野外BOSS玩法 全网曝光 赤壁传说 半回合制国 ACT 奇珍商城 热血战歌 传奇宝藏抽奖 打开方式 门徒 门徒获取玩法 三大萌宠简介