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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/432401.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web 开发中很实用的10个效果【附源码下载】

在工作中,我们可能会用到各种交互效果。而这些效果在平常翻看文章的时候碰到很多,但是一时半会又想不起来在哪,所以养成知识整理的习惯是很有必要的。这篇文章给大家推荐10个在 Web 开发中很有用的效果,记得收藏! 超炫…

深入分析MFC文档视图结构(项目实践)

文档视图结构(Document/View Architecture)是MFC的精髓,也是Observer模式的具体实现框架之一,Document/View Architecture通过将数据和其表示分开,提供了很好的数据层次和表现层次的解耦。然而,虽然我们使用…

蓝图中实现人物移动2

从Pawn继承一个蓝图类并编写下面代码,并添加摄像机组件 1. 实现前后移动2. 实现左右移动3. 实现鼠标移动方向4. 实现鼠标俯仰

php 提取前一百个字,如何在PHP中提取字符串的前100個字符?

I am looking for a way to pull the first 100 characters from a string variable to put in another variable for printing.我正在尋找一種方法,從字符串變量中提取前100個字符,並將其放入另一個變量中進行打印。Is there a function that can do th…

实现两个pawn的切换

在playercontroller里面编写下面代码并把两个pawn放置到场景中

zoj2008 最短路

题意:给你n个点的有向图,从1点到其他所有点又从其他点回到1点的最短路。 思路:可以求一次从1点出发的最短路,再反向建图,再求一次从1出发的最短路,把两次的结果加起来就是题目所求。由于边比较多&#xff0…

steam程序员php玩的游戏,Steam:又一款烧脑的编程游戏上线,宅男回家了也要开心加班!...

原标题:Steam:又一款烧脑的编程游戏上线,宅男回家了也要开心加班!要是小伙伴们喜欢什么解谜、编程类游戏,相信Steam上的《程序员升职记》应该都是绿了的游戏,这款给宅男们设计智力游戏能让你享受到从底层到…

模式(一)javascript设计模式

模式有三种:Architectural Pattern、Design Pattern、Coding Pattern,即:框架模式、设计模式、编程模式。本文主要讲解javascript中的设计模式,好的设计模式能够提高代码的重用性,可读性,使代码更容易的维护…

matlab如何提高运算速速,如何提高以下程序的运算速度及有选择性的保存数据?...

多谢管理员math的关注。“空位随机游走过程”有英语我也不知道如何说。只知道“空位”叫做:vacancy我解解释一下整个过程。不过过程比较长一些!为了说明问题,我就举个例子如:Fe-Mg二元合金,其中Mg占3%,空位…

GPS经纬度换算成XY坐标

/// <summary>///GPS经纬度换算成x,y坐标 /// </summary>/// <param name"l"> 精度 </param>/// <param name"B"> 纬度 </param>/// <param name"xc"> X坐标 </param>/// <param na…

Valid Sudoku

这道题是个细节实现题&#xff0c;只要把valid sudoku满足的三个条件判断一下即可。 valid sudoku需满足下列三个条件&#xff1a; 1&#xff09;每一行数字1~9有且只出现一次。2&#xff09;每一列数字1~9有且只出现一次。3&#xff09;对于每个3*3的sub-box&#xff08;用i3、…

CosiWorksNew

CMainFrameCBCGPRibbonBar m_wndRibbonBar; 工具栏CreateRibbonBar() 构建工具栏CWProjectBar m_wndProjectBar; 左侧的工程窗口CWModelLibBar m_wndModellibBar; 左侧的模型窗口ShowControlBar(CBCGPDockingControlBar*, BOOL, BOOL, BOOL) 显示或隐藏左侧窗…

make xdb file.php,SCWS入门使用指南

B 结合php使用要想在php中使用scws分词工具&#xff0c;必须安装php扩展&#xff0c;并且必须要求php与scws安装在同一台机器。cd /usr/local/src/scws-1.2.2/usr/local/php-5.3.8/bin/phpize ./configure --with-scws/usr/local/scws --with-php-config/usr/local/php-5…

异步编程中的最佳做法(Async/Await) --转

近日来&#xff0c;涌现了许多关于 Microsoft .NET Framework 4.5 中新增了对 async 和 await 支持的信息。 本文旨在作为学习异步编程的“第二步”&#xff1b;我假设您已阅读过有关这一方面的至少一篇介绍性文章。 本文不提供任何新内容&#xff0c;Stack Overflow、MSDN 论坛…

spline 用法

控制actor在level中沿着一个spline path运动。 由finterp to 函数的输出数值来控制每一帧actor运动的距离。 从开始位置到spline path的终点的时间&#xff0c;是1/interp speed。假如我们控制actor从开头到终点运动的总时间是1秒&#xff0c;那么 interp speed就传入0.5&#…

php 时间戳获取周几,PHP实现根据时间戳获取周几的方法,php戳获取周_PHP教程

PHP实现根据时间戳获取周几的方法&#xff0c;php戳获取周本文实例讲述了PHP实现根据时间戳获取周几的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;获取某个时间戳的周几&#xff0c;以及未来几天以后的周几其中&#xff1a;$time 代表时间$i 今天开始具体示例…

HTML5 Canvas 高仿逼真 3D 布料图案效果

HTML5 规范引进了很多新特性&#xff0c;其中最令人期待的之一就是 Canvas 元素&#xff0c;HTML5 Canvas 提供了通过 JavaScript 绘制图形的方法&#xff0c;非常强大。下面给大家分享一个 HTML5 Canvas 绘制的 3D 布料图案效果。 温馨提示&#xff1a;为保证最佳的效果&#…

oracle中exp/imp讲解

Exp/Imp是oracle备份数据的两个命令行工具 1.本地数据库导入导出 1.导出 &#xff08;运行---cmd中操作&#xff09; exp 用户名/密码数据库实例名file本地存放路径 eg: exp jnjp/jnjpORCL fileC:/jnjp.dmp2.导入 imp 用户名/密码数据库实例名file本地数据库文件存放路径fully …

用toad实现oracle数据迁移,Oracle 使用TOAD实现导入导出Excel数据

在Oracle应用程序的开发过程中&#xff0c;访问数据库对象和编写SQL程序是一件乏味且耗费时间的工作&#xff0c;对数据库进行日常管理也是需要很多SQL脚本才能完成的。Quest Software为此提供了高效的Oracle应用开发工具-Toad。在Toad的新版本中&#xff0c;还加入了DBA模块&a…

本地windows主机无法访问虚拟机里主机解决办法

一&#xff1a;设置虚拟机里IP&#xff0c;使其与本地计算机IP在同一网段 本地计算机网络IP设置如下&#xff1a; 虚拟机里ip为192.168.1.9 设置IP步骤请参考&#xff1a;Linux里如何设置IP(RED HAT) 二&#xff1a;将虚拟机网络连接方式设为桥接 假如&#xff0c;VirtualBox不…