如何利用OCS存取PHP session全局变量
如何利用OCS存取PHP session全局变量
阿里云技术团队:余汶龙
一、场景介绍
用户在利用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。
原文地址:http://blog.aliyun.com/1564
如何利用OCS存取PHP session全局变量的更多相关文章
- 如何利用OCS缓存TomcatSession全局变量(转)
转: 首先非常感谢阿里云给我们提供了一个如此省事的平台. 我们公司是一家物流公司,主要提供运输和仓储的服务.我们现在正在把我们的系统往阿里云迁移.当然,还在迁移过程中,所以还有很多是没办法现在说得太清 ...
- C#-WebForm-★内置对象简介★Request-获取请求对象、Response相应请求对象、Session全局变量(私有)、Cookie全局变量(私有)、Application全局公共变量、ViewState
内置对象: 1.Request - 获取请求对象 用法:接收传值 protected void Page_Load(object sender, EventArgs e) { TextBox1.Tex ...
- 项目分布式部署那些事(2):基于OCS(Memcached)的Session共享方案
在不久之前发布了一篇"项目分布式部署那些事(1):ONS消息队列.基于Redis的Session共享,开源共享",因为一些问题我们使用了阿里云的OCS,下面就来简单的介绍和分享下相 ...
- 采用EaglePHP框架解决分布式集群服务器利用MEMCACHE方式共享SESSION数据的问题
一.问题起源 稍大一些的网站,通常都会有好几个服务器,每个服务器运行着不同功能的模块,使用不同的二级域名,而一个整体性强的网 站,用户系统是统一的,即一套用户名.密码在整个网站的各个模块中都是可以登录 ...
- 多域名THINKPHP利用MEMCACHE方式共享SESSION数据(转)
一.问题起源 稍大一些的网站,通常都会有好几个服务器,每个服务器运行着不同功能的模块,使用不同的二级域名,而一个整体性强的网站,用户系统是统一的,即一套用户名.密码在整个网站的各个模块中都是可以登录使 ...
- 利用ServletContext,实现Session动态权限变更
1.前言 很多Spring Boot应用使用了Session作为缓存,一般会在用户登录后保存用户的关键信息,如: 用户ID. 用户名. 用户token. 权限角色集合. 等等... 在管理员修改了用户 ...
- 利用session_set_save_handler()函数将session保存到MySQL数据库中
PHP保存session默认的是采用的文件的方式来保存的,这仅仅在文件的空间开销很小的windows上是可以采用的,但是如果我们采用uinx或者是liux上的文件系统的时候,这样的文件系统的文件空间开 ...
- springboot集成springsession利用redis来实现session共享
转:https://www.cnblogs.com/mengmeng89012/p/5519698.html 这次带来的是spring boot + redis 实现session共享的教程. 在sp ...
- python利用numpy存取文件
NumPy提供了多种存取数组内容的文件操作函数.保存数组数据的文件可以是二进制格式或者文本格式.二进制格式的文件又分为NumPy专用的格式化二进制类型和无格式类型. numpy格式的文件可以保存为后缀 ...
随机推荐
- Live m3u8播放3个文件自动停止问题
Live m3u8播放3个文件自动停止问题 1.问题描述 最近做一个转码切片播放测试,使用HLS(HTTP Live Streaming)来做直播, 每个TS分片时间为10s,根据TS分片文件生成以下 ...
- HDU 5534 Partial Tree (完全背包变形)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5534 题意: 给你度为1 ~ n - 1节点的权值,让你构造一棵树,使其权值和最大. 思路: 一棵树上 ...
- HDU 2196 Computer (树dp)
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2196 给你n个点,n-1条边,然后给你每条边的权值.输出每个点能对应其他点的最远距离是多少 ...
- HDU 4593 Robot (水题)
题意:有 n 个数,其中有两个数中相同的,让你找出这个数. 析:太简单了么,只要用数组下标记一下这个数的数量即可. 代码如下: #include <iostream> #include & ...
- Linux下Hadoop集群环境的安装配置
1)安装Ubuntu或其他Linux系统: a)为减少错误,集群中的主机最好安装同一版本的Linux系统,我的是Ubuntu12.04. b)每个主机的登陆用户名也最好都一样,比如都是hadoop,不 ...
- 用SSH连接SSH连接nitrous.io
CSDN怎么传不上图片... http://user.qzone.qq.com/1756942789/blog/1388662053 1:先下载Bitvise SSH 2:打开 keypair man ...
- C#判断一个类中有无"指定名称"的方法
C#中可以通过反射分析元数据来解决这个问题,示例代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 2 ...
- Apache实现动态虚拟主机
经常在开发中为Apache web server添加虚拟主机 方便多个项目的 同时运营,但是每次增加新的项目时都得重新配置增加VirtualHost:虚拟主机 部分,时间久了VirtualHo ...
- EasyMock问题总结
1. java.lang.IllegalStateException: missing behavior definition for the preceding method call getBid ...
- php写扩展
用PHP扩展做一个HelloWorld! PHP 尽管提供了大量有用的函数,但是在特殊情况下还可能需要进行扩展编程,比如大量的 PECL(PHP Extension Community Library ...