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下用GD生成生成缩略图的两个选择和区别
Apr 17 PHP
php入门学习知识点六 PHP文件的读写操作代码
Jul 14 PHP
支持中文字母数字、自定义字体php验证码代码
Feb 27 PHP
解析PHP处理换行符的问题 \r\n
Jun 13 PHP
php_screw 1.5:php加密: 安装与使用详解
Jun 20 PHP
PHP函数preg_match_all正则表达式的基本使用详细解析
Aug 31 PHP
smarty获得当前url的方法分享
Feb 14 PHP
php图片添加文字水印实现代码
Mar 15 PHP
php 指定范围内多个随机数代码实例
Jul 18 PHP
golang 调用 php7详解及实例
Jan 04 PHP
php+ajax实现仿百度查询下拉内容功能示例
Oct 20 PHP
laravel按天、按小时,查询数据的实例
Oct 09 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 字符过滤类,用于过滤各类用户输入的数据
2009/05/27 PHP
thinkphp使用phpmailer发送邮件的方法
2014/11/24 PHP
IE6,IE7,IE8下使用Javascript记录光标选中范围(已补全)
2011/08/28 Javascript
Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
2013/11/14 Javascript
showModalDialog模态对话框的使用详解以及浏览器兼容
2014/01/11 Javascript
JQuery节点元素属性操作方法
2015/06/11 Javascript
AngularJS仿苹果滑屏删除控件
2016/01/18 Javascript
学习JavaScript设计模式之责任链模式
2016/01/18 Javascript
AngularJS中$interval的用法详解
2016/02/02 Javascript
js删除局部变量的实现方法
2016/06/25 Javascript
Node.js中的http请求客户端示例(request client)
2017/05/04 Javascript
微信小程序表单验证功能完整实例
2017/12/01 Javascript
Vue 应用中结合vux使用微信 jssdk的方法
2018/08/28 Javascript
解决vue页面渲染但dom没渲染的操作
2020/07/27 Javascript
[02:26]2016国际邀请赛8月3日开战 中国军团出征西雅图
2016/08/02 DOTA
Python中threading模块join函数用法实例分析
2015/06/04 Python
Python的Twisted框架中使用Deferred对象来管理回调函数
2016/05/25 Python
python 获取等间隔的数组实例
2019/07/04 Python
python实现画出e指数函数的图像
2019/11/21 Python
python实现人机猜拳小游戏
2020/02/03 Python
python接口自动化之ConfigParser配置文件的使用详解
2020/08/03 Python
Python自动化之UnitTest框架实战记录
2020/09/08 Python
python切片作为占位符使用实例讲解
2021/02/17 Python
data:image data url 文件转为Blob上传后端的方法
2019/07/16 HTML / CSS
美国体育用品商店:Rally House(NCAA、NFL、MLB、NBA、NHL和MLS)
2018/01/03 全球购物
Python面试题集
2012/03/08 面试题
医学专业毕业生求职信
2014/06/20 职场文书
班级课外活动总结
2014/07/09 职场文书
2014年扶贫工作总结
2014/11/18 职场文书
团拜会主持词
2015/07/04 职场文书
法制工作总结2015
2015/07/23 职场文书
Feign调用全局异常处理解决方案
2021/06/24 Java/Android
Python连接Postgres/Mysql/Mongo数据库基本操作大全
2021/06/29 Python
mysql使用instr达到in(字符串)的效果
2022/04/03 MySQL
Java 超详细讲解hashCode方法
2022/04/07 Java/Android
Mybatis-plus配置分页插件返回统一结果集
2022/06/21 Java/Android