387
阿里云
2.1 保存网站用户登录session__2. OCS最佳实践_开放缓存OCS 体验_体验馆-阿里云
使用OCS保存网站用户登录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官网的PHP教程示例编译扩展。
步骤如下:
wget https://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段其他有用参数,参考链接如下:
https://php.net/manual/en/memcached.configuration.php https://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。
OCS最佳实践
- 通过OCS记录接口访问频率,快速了解
最后更新:2016-05-06 10:45:31
上一篇:
1. OCS快速开始__开放缓存OCS 体验_体验馆-阿里云
下一篇:
2.2 记录接口访问频率__2. OCS最佳实践_开放缓存OCS 体验_体验馆-阿里云
InvalidSignature__错误说明_API 网关-阿里云
阿里云发布新一代数据库产品POLARDB,跑分超越AWS Aurora
堡垒机__使用金融云产品_金融云-阿里云
NotifyContentFormat__基本概念_API使用手册_消息服务-阿里云
查询执行计划详情__执行计划_API参考_E-MapReduce-阿里云
1. OSS快速开始__开放存储OSS 体验_体验馆-阿里云
在违规处罚中,一般违规、严重违规和特别严重违规是怎么定义的?__规则FAQ_常见问题_阿里云规则-阿里云
马云叫你来捉妖,阿里云栖大会本周三正式召开了,去年马云提出新零售催生了三江购物,今年呢?
通用错误码__API-Reference_日志服务-阿里云
处理-数据清洗/ETL__最佳实践_日志服务-阿里云
相关内容
常见错误说明__附录_大数据计算服务-阿里云
发送短信接口__API使用手册_短信服务-阿里云
接口文档__Android_安全组件教程_移动安全-阿里云
运营商错误码(联通)__常见问题_短信服务-阿里云
设置短信模板__使用手册_短信服务-阿里云
OSS 权限问题及排查__常见错误及排除_最佳实践_对象存储 OSS-阿里云
消息通知__操作指南_批量计算-阿里云
设备端快速接入(MQTT)__快速开始_阿里云物联网套件-阿里云
查询API调用流量数据__API管理相关接口_API_API 网关-阿里云
使用STS访问__JavaScript-SDK_SDK 参考_对象存储 OSS-阿里云