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 相关文章推荐
PHP反向代理类代码
Aug 15 PHP
微信API接口大全
Apr 15 PHP
简单介绍PHP非阻塞模式
Mar 03 PHP
PHP.vs.JAVA
Apr 29 PHP
yii2带搜索功能的下拉框实例详解
May 12 PHP
Yii2增删改查之查询 where参数详细介绍
Aug 08 PHP
php微信高级接口调用方法(自定义菜单接口、客服接口、二维码)
Nov 28 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
Jul 26 PHP
详解php语言最牛掰的Laravel框架
Nov 20 PHP
PHP实现通过strace定位故障原因的方法
Apr 29 PHP
在Laravel 的 Blade 模版中实现定义变量
Oct 14 PHP
通过代码实例解析PHP session工作原理
Dec 11 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 和 MYSQL
2006/10/09 PHP
php简单生成随机数的方法
2015/07/30 PHP
php中array_slice和array_splice函数解析
2016/10/18 PHP
PHP4和PHP5版本下解析XML文档的操作方法实例分析
2017/05/20 PHP
javascript教程:关于if简写语句优化的方法
2014/05/17 Javascript
基于javascript实现彩票随机数生成(简单版)
2020/04/17 Javascript
JavaScript判断微信浏览器实例代码
2016/06/13 Javascript
jQuery UI结合Ajax创建可定制的Web界面
2016/06/22 Javascript
JavaScript浮点数及运算精度调整详解
2016/10/21 Javascript
第一次记录Bootstrap table学习笔记(1)
2017/05/18 Javascript
详解Vue 2.0封装axios笔记
2017/06/22 Javascript
原生JS上传大文件显示进度条 php上传文件代码
2020/03/27 Javascript
Node.js readline 逐行读取、写入文件内容的示例
2018/03/01 Javascript
angularJs中json数据转换与本地存储的实例
2018/10/08 Javascript
vue.js中导出Excel表格的案例分析
2019/06/11 Javascript
Vue+Node服务器查询Mongo数据库及页面数据传递操作实例分析
2019/12/20 Javascript
JavaScript设计模式---单例模式详解【四种基本形式】
2020/05/16 Javascript
js实现查询商品案例
2020/07/22 Javascript
跟老齐学Python之变量和参数
2014/10/10 Python
python中使用xlrd、xlwt操作excel表格详解
2015/01/29 Python
python中利用Future对象回调别的函数示例代码
2017/09/07 Python
PyQt5利用QPainter绘制各种图形的实例
2017/10/19 Python
python3操作微信itchat实现发送图片
2018/02/24 Python
详解Matplotlib绘图之属性设置
2019/08/23 Python
Python的互斥锁与信号量详解
2019/09/12 Python
Python基于Tensor FLow的图像处理操作详解
2020/01/15 Python
Python命名空间namespace及作用域原理解析
2020/06/05 Python
python如何提升爬虫效率
2020/09/27 Python
Maxpeedingrods美国:高性能汽车零件
2020/02/14 全球购物
Linux的文件类型
2012/03/07 面试题
农业局学习党的群众路线教育实践活动心得体会
2014/03/07 职场文书
诉讼代理人授权委托书
2014/10/11 职场文书
西游降魔篇观后感
2015/06/15 职场文书
2015年校本培训工作总结
2015/07/24 职场文书
公司员工管理制度
2015/08/04 职场文书
志愿服务心得体会
2016/01/15 职场文书