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中利用wsdl创建标准webservice的实现代码
Dec 07 PHP
ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单
May 15 PHP
php自定文件保存session的方法
Dec 10 PHP
php数组比较实现查找连续数的方法
Jul 29 PHP
ThinkPHP自定义Redis处理SESSION的实现方法
May 16 PHP
php自定义函数实现汉字转换utf8编码的方法
Sep 29 PHP
PHP中CheckBox多选框上传失败的代码写法
Feb 13 PHP
php readfile下载大文件失败的解决方法
May 22 PHP
PHP实现的mysql主从数据库状态检测功能示例
Jul 20 PHP
php接口实现拖拽排序功能
Apr 23 PHP
PHP文件后缀不强制为.php方法
Mar 31 PHP
laravel入门知识点整理
Sep 15 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判断浏览器的类型和语言的函数代码
2013/02/28 PHP
解析PHP中empty is_null和isset的测试
2013/06/29 PHP
PHP正则表达式匹配替换与分割功能实例浅析
2017/02/04 PHP
php判断/计算闰年的方法小结【三种方法】
2019/07/06 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
javascript 实现子父窗体互相传值的简单实例
2014/02/17 Javascript
js获取数组的最后一个元素
2015/04/14 Javascript
JQuery EasyUI学习教程之datagrid 添加、修改、删除操作
2016/07/09 Javascript
判断数组的最佳方法(推荐)
2016/10/11 Javascript
JavaScript中this的用法及this在不同应用场景的作用解析
2017/04/13 Javascript
微信小程序网络请求wx.request详解及实例
2017/05/18 Javascript
Javascript ES6中对象类型Sets的介绍与使用详解
2017/07/17 Javascript
node.js 用socket实现聊天的示例代码
2017/10/17 Javascript
input type=file 选择图片并且实现预览效果的实例
2017/10/26 Javascript
javascript填充默认头像方法
2018/02/22 Javascript
Node.Js生成比特币地址代码解析
2018/04/21 Javascript
Bootstrap table表格初始化表格数据的方法
2018/07/25 Javascript
vue单页面实现当前页面刷新或跳转时提示保存
2018/11/02 Javascript
实例讲解vue源码架构
2019/01/24 Javascript
tweenjs缓动算法的使用实例分析
2019/08/26 Javascript
Vue实现滑动拼图验证码功能
2019/09/15 Javascript
JavaScript对象原型链原理解析
2020/01/22 Javascript
Python全局变量操作详解
2015/04/14 Python
python 根据pid杀死相应进程的方法
2017/01/16 Python
嘻哈珠宝品牌:KRKC&CO
2020/10/19 全球购物
材料成型专业个人求职信范文
2013/09/25 职场文书
校运会广播稿100字
2014/01/27 职场文书
合伙协议书范本
2014/04/21 职场文书
开展批评与自我批评发言材料
2014/05/15 职场文书
区域销售主管岗位职责
2014/06/15 职场文书
运动会标语
2014/06/21 职场文书
公司的门卫岗位职责
2014/09/09 职场文书
离婚起诉书怎么写
2015/05/19 职场文书
谢师宴家长致辞
2015/07/27 职场文书
团支部组织委员竞选稿
2015/11/21 职场文书
MySQL令人大跌眼镜的隐式转换
2021/08/23 MySQL