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

一、场景介绍 &">nbsp; 用户在利用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时间     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。

时间: 2024-12-02 07:57:39

如何将PHP session信息缓存到memcached里面的相关文章

SESSION信息保存在哪个文件目录下以及能够用来保存什么类型的数据_php技巧

1.SESSION信息保存在哪? 复制代码 代码如下: <?php session_start(); $_SESSION['name']='marcofly'; ?> session默认是保存到c:\windows\temp目录下,但是通过修改php.ini中的session.save_path值可以改变session的保存路径. 如:session.save_path = "d:/wamp/tmp" 执行该代码后,就会在d:/wamp/tmp目录下,新增一个文件名为:se

请求- Https跳到http时session信息丢失可能出现的情况和解决方案

问题描述 Https跳到http时session信息丢失可能出现的情况和解决方案 问题是从https跳转到http有时能取到我们需要的session数值,有时取不到.所以请求大神能够给出完整的从Https调到http时session信息丢失出现的问题及解决方案. 解决方案 http://name327.iteye.com/blog/1591796

安卓webview跳转activity怎么保存session信息

问题描述 安卓webview跳转activity怎么保存session信息 安卓webview跳转activity怎么保存session信息,登陆页面是webview的页面,但是里面的功能使用的是安卓activity,怎么在webview页面跳转到activiy,怎么在activity得到session信息,并让热它不失效. 解决方案 你的问题是webView登录了,但是在Activity中访问网路却发现没登录对吧.那是因为你在Activity中访问网络需要在头中加入Cookie信息.而这个信息

批量加载大图时,在不缓存到sd卡的前提下,如何避免oom并且不影响图片浏览

问题描述 批量加载大图时,在不缓存到sd卡的前提下,如何避免oom并且不影响图片浏览 我在一个界面中,需要加载很多大图片,而且还需要在该界面发送最多5张大图片(每张图片被我压缩到最大size为200k).之前加载图片用的是imageloader,但是imageloader没有提供让我可以自按照定义比例缩放图片的方法,因此,又重新使用Picasso来做,Picasso提供过来resize(width,height)的方法.那么问题来了:1.我使用imageloader或者使用Picasso的时候,

使用URL传输SESSION信息_php技巧

 在php的学习中,会话是我们常常用到的,那今天我们就来详细讲讲会话中的session: 一.session的工作机制: 当开启session后,服务器会在服务器中保存session文件,然后再浏览器保存session的id号,用于获取对应的session信息: 二.下面是文章的重点:基于URL传输session 如果按照基本的session方法传输session,那么会用到用户浏览器中的cookie,一旦用户关闭cookie,那么session就不起作用啦!所以接下来我们将要把session的

求解决内部网站Session信息乱窜问题,真心感谢。不知是程序问题,还是IIS问题。

问题描述 解决netsession登陆用户数量多,用户乱窜的问题.就是公司内部开发的网站系统,用户注册采用session存储用户信息,但是发现用户登录数量多了后就存在用户乱窜,甲的信息是乙,乙的信息是丙.不知道是IIS原因,还是源代码问题.//验证登陆login.aspxfunctionCheckLogin(username,userpwd,auto){if(GetReferById('login_smt'))GetReferById('login_smt').disabled=true;if(

如何捕捉temp表空间出错的session信息和SQL

session 我们有时候会遇见这样的烦恼,在特定的时候总有某个大查询导致临时表空间出错.但我们总不能守侯着捕获相关sql以优化或者处理.可以通过events来诊断 sys@OCN>ALTER SESSION SET EVENTS2 '1652 trace name errorstack level 1'; Session altered. sys@OCN>select count(*) from (select * from alibaba.member order by member_le

php将gd生成的图片缓存到memcache的小例子_php实例

复制代码 代码如下: //开始缓存图片                  ob_start();//启用输出缓存,暂时将要输出的内容缓存起来          imagejpeg($newimage,false,$quality);//输出          $data = ob_get_contents();//获取刚才获取的缓存          ob_end_clean();//清空缓存          $mem =get_memcache();//自己修改          $mem-

关于抓取session信息的一个脚本

关于session的诊断,可以基于动态性能视图,ash,awr.. 自己也写过一些简单的脚本,在平时的工作中也能够完成一些基本的工作.今天在看taner分享的脚本snapper的时候,让自己眼前一亮,也发现自己存在着很多的不足的地方. 可以从脚本中看到他孜孜不倦的分享着自己的心得,而且自己也写了一些更加深入的一些工具集来解析oracle的技术细节. 脚本的功能很多,林林总总下来代码有近2000多行,功能点很多,自己看文档也简单尝试了几个.发现还不错.可以在平时的工作中也基于自己的需求来做一些修改