php原生session,利用Memcached在php下实现session机制 替换PHP的原生session支持
方法文件
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支持相关推荐
- php下session入memcached
windows7 32位环境下所需软件 一.安装Apache2.4+PHP5.6 Apache2.4配置httpd.conf 参考文章:http://jingyan.baidu.com/article ...
- 利用memcached实现CAS单点登录集群部署
前言:利用memcached实现CAS单点登录集群部署 负载均衡: 将接口请求的有状态性变成无状态性.是我们在实现负载均衡时必要要解决的问题.以应用接口的session状态为例,一般解决方法都是将se ...
- 根据id删除localstorage数据_原生js利用localstorage实现简易TODO list应用
前言:小生不才,只懂得一些皮毛,我努力以最简单的语言将心中的想法表述出来,让更多人能够很轻松的弄明白.文章里面有不足之处望各位大牛指出,使得后面的文章能够朝着更好的方向发展.另外,大家记得点赞哟! 欢 ...
- js事件里面套事件怎么不管用_原生js利用localstorage实现简易TODO list应用
前言:小生不才,只懂得一些皮毛,我努力以最简单的语言将心中的想法表述出来,让更多人能够很轻松的弄明白.文章里面有不足之处望各位大牛指出,使得后面的文章能够朝着更好的方向发展.另外,大家记得点赞哟! 欢 ...
- PHP反序列化原生类利用
前言 之前对反序列化原生类进行过总结,但可能总结的方面不同,在ctf用到的很少,所以这里在对ctf常用原生类进行一次总结. 原生类 php中内置很多原生的类,在CTF中常以echo new $a($b ...
- 进一步封装axios并调用其读取数据(吐槽~在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据)
注意!!!(修改于2020年7月18日) 在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据 报错截图如下 报错内容: {&quo ...
- memcached在windows下的基本使用方法
为什么80%的码农都做不了架构师?>>> 这理说明一下,memcached在xp下的使用,将附件中的memcached下载后可以直接使用,默认端口为11211,来说明一下mem ...
- html鼠标点击有手势出来,用原生js+css3撸的一个下拉手势事件插件
; (function () { var DropDown = function (dropId = 'dropDwon', distance = 60, callBack = () => {} ...
- 利用多线程实现linux下C语言的聊天室程序:
转载:http://www.360doc.com/content/16/0421/11/478627_552531090.shtml 利用多线程实现linux下C语言的聊天室程序: 客户端代码: th ...
最新文章
- HDU - 3333 Turing Tree 线段树区间不同值和+详解+思想
- FFmpeg中一个线程获取视频流一个线程执行scale测试代码
- Linux下常见的文本处理命令
- 我用这个框架拿了Kaggle大赛冠军
- 27.思科防火墙(ASA)
- LeetCode(合集)括号 golang
- 三角形面积=SQRT(S*(S-a)*(S-b)*(S-c)) 其中S=(a+b+c)/2,a、b、c为三角形的三边。 定义两个带参的宏,一个用来求area, 另一个宏用来求S。 写程序,在程序中用带
- 26 CO配置-控制-产品成本控制-成本对象控制-期末结算-定义结果分析版本
- unity安卓打包修改启动画面_Unity自动化打包Android APK
- jQuery 文本编辑器插件 HtmlBox 使用
- 从输入url到页面(二):TCP/IP 与 http协议
- Google搜索技巧终极收集 - 101个Google技巧
- WPF的5种绑定模式(mode)
- paip.spring 获取bean getBean 没有beanid的情况下
- 转载:住在我隔壁的大学刚毕业的小夫妻
- VoLTE SIP代码意义及流程图解
- CHROME插件开发之·web页面与插件后台通信(chrome.runtime.sendMessage => chrome.runtime.onMessageExternal.addListener)
- 前端微信小程序面试题总结
- 培养创造性思维的20个方法
- 【轮子1】造一个炫酷的DEBUG输出
热门文章
- java错位_java – 如何保护自己免受参数错位的影响
- 14 | 排序优化:如何实现一个通用的、高性能的排序函数?
- cmd pc如何开多个微信_抖音打击刷赞刷粉,240多个百万粉丝大V被封;微信PC版再更新...
- Javaweb maven项目tomcat报错: javax.naming.NamingException: 无法创建资源实例
- conda虚拟环境中安装ipython
- 文件读写的“二进制模式”和“文本模式”
- linux的nohup命令的用法。
- 【收藏】C# WinForm开发系列 - DataGridView 使用方法集锦 - 宁波.Net技术讨论区
- CSS基础选择器(选择器的优先级),CSS样式块( 长度/颜色/显示方式/文本样式),盒模型组成,盒模型-block,盒模型布局...
- idea ssm项目移包报错问题