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和ACCESS写聊天室(七)
Oct 09 PHP
PHP5.2中date()函数显示时间与北京时间相差8小时的解决办法
May 28 PHP
dedecms系统的广告设置代码 基础版本
Apr 09 PHP
深入php socket的讲解与实例分析
Jun 13 PHP
php实现分页工具类分享
Jan 09 PHP
ThinkPHP3.1新特性之内容解析输出详解
Jun 19 PHP
ThinkPHP使用Smarty第三方插件方法小结
Mar 19 PHP
Zend Framework实现多服务器共享SESSION数据的方法
Mar 22 PHP
Yii框架批量插入数据扩展类的简单实现方法
May 23 PHP
PHP实现的分解质因数操作示例
Aug 01 PHP
PHP Laravel中的Trait使用方法
Jan 20 PHP
PHP封装的简单连接MongoDB类示例
Feb 13 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
使用Apache的htaccess防止图片被盗链的解决方法
2013/04/27 PHP
php函数实现判断是否移动端访问
2015/03/03 PHP
PHP扩展Memcache分布式部署方案
2015/12/06 PHP
PHP实现重载的常用方法实例详解
2017/10/18 PHP
php命令行写shell实例详解
2018/07/19 PHP
让whoops帮我们告别ThinkPHP6的异常页面
2020/03/02 PHP
JavaScript触发器详解
2007/03/10 Javascript
jQuery autocomplete插件修改
2009/04/17 Javascript
jQuery对象和DOM对象相互转化
2009/04/24 Javascript
ExtJs纵坐标值重复问题的解决方法
2014/02/27 Javascript
javascript实现的右下角弹窗实例
2015/04/24 Javascript
jquery append 动态添加的元素事件on 不起作用的解决方案
2015/07/30 Javascript
属于你的jQuery提示框(Tip)插件
2016/01/20 Javascript
JavaScript学习小结之被嫌弃的eval函数和with语句实例详解
2016/08/01 Javascript
AngularJS教程之简单应用程序示例
2016/08/16 Javascript
es6学习之解构时应该注意的点
2017/08/29 Javascript
剖析Angular Component的源码示例
2018/03/23 Javascript
vue-cli 引入、配置axios的方法
2018/05/08 Javascript
详解vue使用vue-layer-mobile组件实现toast,loading效果
2018/08/31 Javascript
Vue在页面数据渲染完成之后的调用方法
2018/09/11 Javascript
关于layui toolbar和template的结合使用方法
2019/09/19 Javascript
解决layui批量传值到后台操作时出现传值为空的问题
2019/09/28 Javascript
Python实时获取cmd的输出
2015/12/13 Python
Python使用Srapy框架爬虫模拟登陆并抓取知乎内容
2016/07/02 Python
python实现list由于numpy array的转换
2018/04/04 Python
Python如何实现转换URL详解
2019/07/02 Python
python将excel转换为csv的代码方法总结
2019/07/03 Python
python环境下安装opencv库的方法
2020/03/05 Python
详解HTML5中的标签
2015/06/19 HTML / CSS
用html5的canvas和JavaScript创建一个绘图程序的简单实例
2016/07/06 HTML / CSS
英国灯具和灯泡网上商店:Lights.co.uk
2018/02/02 全球购物
捷克时尚网上商店:OTTO
2018/03/15 全球购物
合作协议书范本
2014/04/17 职场文书
创业计划书之餐饮馄饨店
2019/07/18 职场文书
python中的class_static的@classmethod的巧妙用法
2021/06/22 Python
python内置模块之上下文管理contextlib
2022/06/14 Python