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

  • 相关阅读:
    递归函数及Java范例
    笔记本的硬盘坏了
    “References to generic type List should be parameterized”
    配置管理软件(configuration management software)介绍
    WinCE文件目录定制及内存调整
    使用Silverlight for Embedded开发绚丽的界面(3)
    wince国际化语言支持
    Eclipse IDE for Java EE Developers 与Eclipse Classic 区别
    WinCE Heartbeat Message的实现
    使用Silverlight for Embedded开发绚丽的界面(2)
  • 原文地址:https://www.cnblogs.com/jincon/p/1800729.html
Copyright © 2011-2022 走看看