zoukankan      html  css  js  c++  java
  • 如何利用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时间

    1

    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.” ”;

    $_SESSION["ocs_key"]=”session_value”;

    echo “session:”.$_SESSION["ocs_key"].” ”;

    ?>

     

    输出如下:

    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.inimemcached.sess_prefix字段决定,默认值为“memc.sess.key.”。然后再拼接上面打出来的sessionidttrct9coa2q62r2sodlq4qf376”即可。*/

    ?>

    该代码输出如下:

    • ocs_key|s:13:”session_value”;

    即PHP SESSION已经成功写入OCS。

    原文地址:http://blog.aliyun.com/1564

  • 相关阅读:
    Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(二)之Introduction to Objects
    Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(一)之Introduction
    JMock2入门
    webWMS开发过程记录(六)- 详细设计之系统管理
    webWMS开发过程记录(五)- 详细设计之系统界面框架设计
    基于gensim深入自然语言处理
    sublime text 搭建anconda的python开发环境遇到问题
    文本分类
    简介:机器学习模型在数学就是解决代价函数的最优化问题
    学习笔记一 线性代数
  • 原文地址:https://www.cnblogs.com/aliyunblogs/p/3908392.html
Copyright © 2011-2022 走看看