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 中include()与require()的对比
Oct 09 PHP
PHP实现采集程序原理和简单示例代码
Mar 18 PHP
PHP 字符串分割和比较
Oct 06 PHP
PHP 程序员的调试技术小结
Nov 15 PHP
php 如何获取数组第一个值
Aug 06 PHP
对PHP PDO的一些认识小结
Jan 23 PHP
PHP计算当前坐标3公里内4个角落的最大最小经纬度实例
Feb 26 PHP
php blowfish加密解密算法
Jul 02 PHP
PHP使用preg_split()分割特殊字符(元字符等)的方法分析
Feb 04 PHP
ThinkPHP框架整合微信支付之刷卡模式图文详解
Apr 10 PHP
php实现的数组转xml案例分析
Sep 28 PHP
解决Laravel5.5下的toArray问题
Oct 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简单获取目录列表的方法
2015/03/24 PHP
简介PHP的Yii框架中缓存的一些高级用法
2016/03/29 PHP
JavaScript中利用各种循环进行遍历的方式总结
2015/11/10 Javascript
javascript类型系统 Array对象学习笔记
2016/01/09 Javascript
jQuery通用的全局遍历方法$.each()用法实例
2016/07/04 Javascript
jQuery简单设置文本框回车事件的方法
2016/08/01 Javascript
jQuery实现的placeholder效果完整实例
2016/08/02 Javascript
Javascript从数组中随机取出不同元素的两种方法
2016/09/22 Javascript
通过BootStrap-select插件 js jQuery控制select属性变化
2017/01/03 Javascript
bootstrap table表格使用方法详解
2017/04/26 Javascript
Scala解析Json字符串的实例详解
2017/10/11 Javascript
微信小程序页面生命周期详解
2018/01/31 Javascript
Vue引入sass并配置全局变量的方法
2018/06/27 Javascript
springMvc 前端用json的方式向后台传递对象数组方法
2018/08/07 Javascript
解决axios发送post请求返回400状态码的问题
2018/08/11 Javascript
Vue.js中 v-model 指令的修饰符详解
2018/12/03 Javascript
Vue-Cli 3.0 中配置高德地图的两种方式
2019/06/19 Javascript
多个vue子路由文件自动化合并的方法
2019/09/03 Javascript
浅谈vue获得后台数据无法显示到table上面的坑
2020/08/13 Javascript
[02:44]2014DOTA2 国际邀请赛中国区预选赛 大神红毯秀
2014/05/25 DOTA
[00:37]2016完美“圣”典风云人物:AMS宣传片
2016/12/06 DOTA
python中的__init__ 、__new__、__call__小结
2014/04/25 Python
python实现最大优先队列
2019/08/29 Python
python 矢量数据转栅格数据代码实例
2019/09/30 Python
python re模块匹配贪婪和非贪婪模式详解
2020/02/11 Python
Django模板之基本的 for 循环 和 List内容的显示方式
2020/03/31 Python
keras model.fit 解决validation_spilt=num 的问题
2020/06/19 Python
关于python的缩进规则的知识点详解
2020/06/22 Python
Python3压缩和解压缩实现代码
2021/03/01 Python
Canvas环形饼图与手势控制的实现代码
2019/11/08 HTML / CSS
Beauty Expert美国/加拿大:购买奢侈美容产品
2018/12/05 全球购物
投资协议书范本
2014/04/21 职场文书
我的未来不是梦演讲稿
2014/09/02 职场文书
2015国庆节66周年演讲稿
2015/03/20 职场文书
学校学习型党组织建设心得体会
2019/06/21 职场文书
vue3获取当前路由地址
2022/02/18 Vue.js