php实现session自定义会话处理器的方法


Posted in PHP onJanuary 27, 2015

本文实例讲述了php实现session自定义会话处理器的方法。分享给大家供大家参考。具体分析如下:

session自定义会话处理器,即就是说,所有关于session的各种操作,都可以通过自定义会话来自己决定。什么意思呢?先来看php.ini里的session.save_handler配置。

默认情况下,session.save_handler = files,表示调用的是系统定义好的处理器(所谓处理器,其实就是一大堆函数/方法)。您可从将session.save_handler设置成 user 或者 memcache,甚至是网络文件系统(云计算)。

session.save_handler = user:表示调用自定义的会话处理器; session.save_handler = memcache:表示...略....(大致是保存在内存里,效率更高)。

当设置 session.save_handler = files 时,关于session的操作,实际上调用了session.set_save_handler(具体查看php手册)的六个回调函数(所谓回调函数,就是系统调用的,不需要指定调用)。六个回调函数见下面代码,php手册里也有:

<?php
function open($save_path, $session_name)

{

  global $sess_save_path;

  $sess_save_path = $save_path;

  return(true);

}
function close()

{

  return(true);

}
function read($id)

{

  global $sess_save_path;

  $sess_file = "$sess_save_path/sess_$id";

  return (string) @file_get_contents($sess_file);

}
function write($id, $sess_data)

{

  global $sess_save_path;

  $sess_file = "$sess_save_path/sess_$id";

  if ($fp = @fopen($sess_file, "w")) {

    $return = fwrite($fp, $sess_data);

    fclose($fp);

    return $return;

  } else {

    return(false);

  }

}
function destroy($id)

{

  global $sess_save_path;

  $sess_file = "$sess_save_path/sess_$id";

  return(@unlink($sess_file));

}
function gc($maxlifetime)

{

  global $sess_save_path;

  foreach (glob("$sess_save_path/sess_*") as $filename) {

    if (filemtime($filename) + $maxlifetime < time()) {

      @unlink($filename);

    }

  }

  return true;

}
session_set_save_handler("open", "close", "read", "write", "destroy", "gc");

session_start();

// proceed to use sessions normally

?>

当你把 session.save_handler设置为user时,你可以把上面这段代码重写,改成你所需要的方法,在执行php文件里调用即可。比如,默认情况下,我们保存 session 的文件名,都是以 sess_ 开头的,其实就是在这里设置的,你可以改成你想要的。

当然,你也可以修改 session 保存的方式,默认是保存在文件里,您可以保存到数据库里(当然不建议你这么做,数据库读取速度更慢),也可以设置保存在内存里(速度最快,在memcache相关内容中有详细讲解)。

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
mysql_fetch_row,mysql_fetch_array,mysql_fetch_assoc的区别
Apr 24 PHP
phpmyadmin MySQL 加密配置方法
Jul 05 PHP
PHP XML操作的各种方法解析(比较详细)
Jun 17 PHP
比较简单实用的PHP无限分类源码分享(思路不错)
Oct 13 PHP
php中++i 与 i++ 的区别
Aug 08 PHP
邮箱正则表达式实现代码(针对php)
Jun 21 PHP
使用PHP接收POST数据,解析json数据
Jun 28 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十六)
Jun 30 PHP
php实现通过cookie换肤的方法
Jul 13 PHP
Yii CFileCache 获取不到值的原因分析
Feb 08 PHP
laravel validate 设置为中文的例子(验证提示为中文)
Sep 29 PHP
phpcmsv9.0任意文件上传漏洞解析
Oct 20 PHP
php实现检查文章是否被百度收录
Jan 27 #PHP
php创建session的方法实例详解
Jan 27 #PHP
PHP连接SQLServer2005的方法
Jan 27 #PHP
php去除html标记的原生函数详解
Jan 27 #PHP
分享下php5类中三种数据类型的区别
Jan 26 #PHP
php字符串过滤与替换小结
Jan 26 #PHP
PHP利用APC模块实现文件上传进度条的方法
Jan 26 #PHP
You might like
PHP表单提交表单名称含有点号(.)则会被转化为下划线(_)
2011/12/14 PHP
fgetcvs在linux的问题
2012/01/15 PHP
PHP保留两位小数并且四舍五入及不四舍五入的方法
2013/09/22 PHP
PHP利用二叉堆实现TopK-算法的方法详解
2017/04/24 PHP
Add Formatted Data to a Spreadsheet
2007/06/12 Javascript
javascript中获取下个月一号,是星期几
2012/06/01 Javascript
原生js实现半透明遮罩层效果具体代码
2013/06/06 Javascript
JavaScript中的原型和继承详解(图文)
2014/07/18 Javascript
javascript跑马灯抽奖实例讲解
2020/04/17 Javascript
IE8 内存泄露(内存一直增长 )的原因及解决办法
2016/04/06 Javascript
实现React单页应用的方法详解
2016/08/02 Javascript
学习Javascript闭包(Closure)知识
2016/08/07 Javascript
浅谈js中字符和数组一些基本算法题
2016/08/15 Javascript
JS实现六边形3D拖拽翻转效果的方法
2016/09/11 Javascript
微信小程序  生命周期详解
2016/10/27 Javascript
web 屏蔽BackSpace键实例代码
2016/12/24 Javascript
详谈表单格式化插件jquery.serializeJSON
2017/06/23 jQuery
Node.js + express实现上传大文件的方法分析【图片、文本文件】
2019/03/14 Javascript
解决vant title-active-color与title-inactive-color不生效问题
2020/11/03 Javascript
微信小程序实现购物车功能
2020/11/18 Javascript
python中使用正则表达式的连接符示例代码
2017/10/10 Python
如何利用Boost.Python实现Python C/C++混合编程详解
2018/11/08 Python
djang常用查询SQL语句的使用代码
2019/02/15 Python
PyTorch中的Variable变量详解
2020/01/07 Python
html5 Canvas画图教程(11)—使用lineTo/arc/bezierCurveTo画椭圆形
2013/01/09 HTML / CSS
澳大利亚宠物商店:Petbarn
2017/11/18 全球购物
Groupon比利时官方网站:特卖和网上购物高达-70%
2019/08/09 全球购物
终止合同协议书
2014/04/17 职场文书
共产党员公开承诺践诺书
2014/05/28 职场文书
水利专业大学生职业生涯规划书范文
2014/09/17 职场文书
评先进个人材料
2014/12/29 职场文书
小学运动会开幕词
2015/01/28 职场文书
党建工作目标管理责任书
2015/01/29 职场文书
毕业生捐书活动倡议书
2015/04/27 职场文书
劳动争议仲裁代理词
2015/05/25 职场文书
源码解读Spring-Integration执行过程
2021/06/11 Java/Android