zoukankan      html  css  js  c++  java
  • 利用Memcached在php下实现session机制,替换PHP的原生session支持

    本例子做为 中科英才安徽PHP社区

    内部讲座专题《memcached专题》的一个扩展例子

    原创来源:安徽PHP社区 ,http://www.hfphp.org

    转载说明出处谢谢。

    方法文件
    session实现文件:memcachedsession.php

    实现原理(也是PHP内部session的实现原理):
    1.先判断客户端有没有sessionid,
    a.没有就添加一个sessionid给客户端,通常是32位hash码,同时初始化一个数组做session容器
    b.如果客户端有sessionid,则利用这个sessionid去memcached里面查数据。
    2.用户在页面执行过程中可以自行修改session容器里的session值
    3.页面最后会把用户的session容器作为值,以用户的sessionid作为键,把这个键值对保存到

    memcached里面

    代码
     <?php


    //memcached服务器连接地址
    $_MEMCACHEAUTH = array(
    'host' => 'localhost'
    , 'port' => 11211
    );

    /*
    获取一些初始化设置值
    */
    $_SESSION_NAME = ini_get("session.name"); //sessionid的名称
    $_SESSION_TIME = ini_get("session.cookie_lifetime"); //sessionid这个cookie的最大保存时间
    $_SESSION_EXPIRE = ini_get("session.gc_maxlifetime"); //session键值对在memcached里面的过期时间
    $_SESSION_MEMKEY = ""//sessionid值

    /*
    自定义的_session_start()方法,替换PHP的原生session_start()方法
    逻辑应该是比较清楚的
    */
    function _session_start()
    {
    global $_SESSION_NAME, $_SESSION_TIME, $_SESSION_MEMKEY;
    global $_SESSION;
    global $_MEMCACHEAUTH, $_sessionmem;

    $_sessionmem = memcache_connect($_MEMCACHEAUTH['host'], $_MEMCACHEAUTH['port']);

    if ( empty($_COOKIE[$_SESSION_NAME]) )
    {
    $_SESSION_MEMKEY = md5uniqid() );
    setcookie($_SESSION_NAME, $_SESSION_MEMKEY , $_SESSION_TIME, "/");
    $_SESSION = array();
    }
    else
    {
    $_SESSION_MEMKEY = $_COOKIE[$_SESSION_NAME];
    $_SESSION = memcache_get($_sessionmem, $_SESSION_MEMKEY );
    if ( $_SESSION === FALSE )
    {
    $_SESSION = array();
    }
    }

    //注册一个handler,这个函数会在页面执行完的时候执行
    register_shutdown_function("_session_save_handler");
    }

    /*
    页面最后执行的方法,用于保存session值,以及关闭memcached连接
    */
    function _session_save_handler()
    {
    global $_sessionmem;
    global $_SESSION, $_SESSION_NAME, $_SESSION_EXPIRE, $_SESSION_MEMKEY;
    memcache_set(
    $_sessionmem, $_SESSION_MEMKEY, $_SESSION, 0, $_SESSION_EXPIRE);
    memcache_close(
    $_sessionmem);
    }
    ?> 



    测试文件:   

    设置session值

     <?php
    /*
    设置session值文件:session_set.php
    */
    include_once "memcachedsession.php";
    _session_start();

    $_SESSION['a'= time();

    ?> 


    获取session值 

     <?php
    /*
    获取session值文件:session_get.php
    */

    include_once "memcachedsession.php";
    _session_start();

    function getsession()
    {
    echo $_SESSION['a'];
    }

    getsession();

    ?>


     Memcached的缓冲应用还是非常不错滴,呵呵,,,

    文章出处:http://bbs.hfphp.org/thread-1185-1-1.html 

    转载:jincon's 包 blog http://www.yi1.com.cn

  • 相关阅读:
    8P
    8N
    8M
    8K
    jenkins在Mac系统中默认日志、配置、启动等文件的路径
    解决Jenkins报Error fetching remote repo 'origin'的办法
    selenium的Web自动化元素点击时仍需要time.sleep等待1秒的问题
    详细配置j enokis
    mac配置启动tomcat
    mac配置启动tomcat
  • 原文地址:https://www.cnblogs.com/jincon/p/1800729.html
Copyright © 2011-2022 走看看