方法文件

session实现文件:memcachedsession.php

实现原理(也是PHP内部session的实现原理):

1.先判断客户端有没有sessionid,

a.没有就添加一个sessionid给客户端,通常是32位hash码,同时初始化一个数组做session容器

b.如果客户端有sessionid,则利用这个sessionid去memcached里面查数据。

2.用户在页面执行过程中可以自行修改session容器里的session值

3.页面最后会把用户的session容器作为值,以用户的sessionid作为键,把这个键值对保存到

memcached里面

//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 = md5( uniqid() );

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值

/*

设置session值文件:session_set.php

*/

include_once "memcachedsession.php";

_session_start();

$_SESSION['a'] = time();

?>

获取session值

/*

获取session值文件:session_get.php

*/

include_once "memcachedsession.php";

_session_start();

function getsession()

{

echo $_SESSION['a'];

}

getsession();

?>

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

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

php原生session,利用Memcached在php下实现session机制 替换PHP的原生session支持相关推荐

  1. php下session入memcached

    windows7 32位环境下所需软件 一.安装Apache2.4+PHP5.6 Apache2.4配置httpd.conf 参考文章:http://jingyan.baidu.com/article ...

  2. 利用memcached实现CAS单点登录集群部署

    前言:利用memcached实现CAS单点登录集群部署 负载均衡: 将接口请求的有状态性变成无状态性.是我们在实现负载均衡时必要要解决的问题.以应用接口的session状态为例,一般解决方法都是将se ...

  3. 根据id删除localstorage数据_原生js利用localstorage实现简易TODO list应用

    前言:小生不才,只懂得一些皮毛,我努力以最简单的语言将心中的想法表述出来,让更多人能够很轻松的弄明白.文章里面有不足之处望各位大牛指出,使得后面的文章能够朝着更好的方向发展.另外,大家记得点赞哟! 欢 ...

  4. js事件里面套事件怎么不管用_原生js利用localstorage实现简易TODO list应用

    前言:小生不才,只懂得一些皮毛,我努力以最简单的语言将心中的想法表述出来,让更多人能够很轻松的弄明白.文章里面有不足之处望各位大牛指出,使得后面的文章能够朝着更好的方向发展.另外,大家记得点赞哟! 欢 ...

  5. PHP反序列化原生类利用

    前言 之前对反序列化原生类进行过总结,但可能总结的方面不同,在ctf用到的很少,所以这里在对ctf常用原生类进行一次总结. 原生类 php中内置很多原生的类,在CTF中常以echo new $a($b ...

  6. 进一步封装axios并调用其读取数据(吐槽~在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据)

    注意!!!(修改于2020年7月18日) 在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据 报错截图如下 报错内容: {&quo ...

  7. memcached在windows下的基本使用方法

    为什么80%的码农都做不了架构师?>>>    这理说明一下,memcached在xp下的使用,将附件中的memcached下载后可以直接使用,默认端口为11211,来说明一下mem ...

  8. html鼠标点击有手势出来,用原生js+css3撸的一个下拉手势事件插件

    ; (function () { var DropDown = function (dropId = 'dropDwon', distance = 60, callBack = () => {} ...

  9. 利用多线程实现linux下C语言的聊天室程序:

    转载:http://www.360doc.com/content/16/0421/11/478627_552531090.shtml 利用多线程实现linux下C语言的聊天室程序: 客户端代码: th ...

最新文章

  1. HDU - 3333 Turing Tree 线段树区间不同值和+详解+思想
  2. FFmpeg中一个线程获取视频流一个线程执行scale测试代码
  3. Linux下常见的文本处理命令
  4. 我用这个框架拿了Kaggle大赛冠军
  5. 27.思科防火墙(ASA)
  6. LeetCode(合集)括号 golang
  7. 三角形面积=SQRT(S*(S-a)*(S-b)*(S-c)) 其中S=(a+b+c)/2,a、b、c为三角形的三边。 定义两个带参的宏,一个用来求area, 另一个宏用来求S。 写程序,在程序中用带
  8. 26 CO配置-控制-产品成本控制-成本对象控制-期末结算-定义结果分析版本
  9. unity安卓打包修改启动画面_Unity自动化打包Android APK
  10. jQuery 文本编辑器插件 HtmlBox 使用
  11. 从输入url到页面(二):TCP/IP 与 http协议
  12. Google搜索技巧终极收集 - 101个Google技巧
  13. WPF的5种绑定模式(mode)
  14. paip.spring 获取bean getBean 没有beanid的情况下
  15. 转载:住在我隔壁的大学刚毕业的小夫妻
  16. VoLTE SIP代码意义及流程图解
  17. CHROME插件开发之·web页面与插件后台通信(chrome.runtime.sendMessage => chrome.runtime.onMessageExternal.addListener)
  18. 前端微信小程序面试题总结
  19. 培养创造性思维的20个方法
  20. 【轮子1】造一个炫酷的DEBUG输出

热门文章

  1. java错位_java – 如何保护自己免受参数错位的影响
  2. 14 | 排序优化:如何实现一个通用的、高性能的排序函数?
  3. cmd pc如何开多个微信_抖音打击刷赞刷粉,240多个百万粉丝大V被封;微信PC版再更新...
  4. Javaweb maven项目tomcat报错: javax.naming.NamingException: 无法创建资源实例
  5. conda虚拟环境中安装ipython
  6. 文件读写的“二进制模式”和“文本模式”
  7. linux的nohup命令的用法。
  8. 【收藏】C# WinForm开发系列 - DataGridView 使用方法集锦 - 宁波.Net技术讨论区
  9. CSS基础选择器(选择器的优先级),CSS样式块( 长度/颜色/显示方式/文本样式),盒模型组成,盒模型-block,盒模型布局...
  10. idea ssm项目移包报错问题