一、场景介绍 &">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。
如何将PHP session信息缓存到memcached里面
时间: 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多行,功能点很多,自己看文档也简单尝试了几个.发现还不错.可以在平时的工作中也基于自己的需求来做一些修改