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

  • 相关阅读:
    Python元组、列表、字典
    测试通过Word直接发布博文
    Python环境搭建(windows)
    hdu 4003 Find Metal Mineral 树形DP
    poj 1986 Distance Queries LCA
    poj 1470 Closest Common Ancestors LCA
    poj 1330 Nearest Common Ancestors LCA
    hdu 3046 Pleasant sheep and big big wolf 最小割
    poj 3281 Dining 最大流
    zoj 2760 How Many Shortest Path 最大流
  • 原文地址:https://www.cnblogs.com/aliyunblogs/p/3908392.html
Copyright © 2011-2022 走看看