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 相关文章推荐
Discuz 5.0 中读取纯真IP数据库函数分析
Mar 16 PHP
php的access操作类
Apr 09 PHP
谨慎使用PHP的引用原因分析
Sep 06 PHP
VPS中使用LNMP安装WordPress教程
Dec 28 PHP
非常全面的php日期时间运算汇总
Nov 04 PHP
centos下file_put_contents()无法写入文件的原因及解决方法
Apr 01 PHP
PHP微信公众号开发之微信红包实现方法分析
Jul 14 PHP
yii2中LinkPager增加总页数和总记录数的实例
Aug 28 PHP
Thinkphp开发--集成极光推送
Sep 15 PHP
php常用字符串查找函数strstr()与strpos()实例分析
Jun 21 PHP
PHP+Apache实现二级域名之间共享cookie的方法
Jul 24 PHP
php引用和拷贝的区别知识点总结
Sep 23 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&amp;MYSQL分页原理及实现
2007/01/02 PHP
PHP学习 运算符与运算符优先级
2008/06/15 PHP
PHP中使用循环实现的金字塔图形
2014/11/08 PHP
php导入excel文件到mysql数据库的方法
2015/01/14 PHP
PHP框架自动加载类文件原理详解
2017/06/06 PHP
PHP超级全局变量【$GLOBALS,$_SERVER,$_REQUEST等】用法实例分析
2019/12/11 PHP
JavaScript 基础知识 被自己遗忘的
2009/10/15 Javascript
dropdownlist之间的互相联动实现(显示与隐藏)
2009/11/24 Javascript
javascript 显示当前系统时间代码
2009/12/28 Javascript
基于jquery的loading 加载提示效果实现代码
2011/09/01 Javascript
JS无限极树形菜单,json格式、数组格式通用示例
2013/07/30 Javascript
js动态移动滚动条至底部示例代码
2014/04/24 Javascript
jQuery图片切换插件jquery.cycle.js使用示例
2014/06/16 Javascript
javascript使用输出语句实现网页特效代码
2015/08/06 Javascript
详解JavaScript中jQuery和Ajax以及JSONP的联合使用
2015/08/13 Javascript
javascript入门教程基础篇
2015/11/16 Javascript
原生javascript实现匀速运动动画效果
2016/02/26 Javascript
下雪了 javascript实现雪花飞舞
2020/08/02 Javascript
解决webpack无法通过IP地址访问localhost的问题
2018/02/22 Javascript
详解nodejs 配置文件处理方案
2019/01/02 NodeJs
小程序获取当前位置加搜索附近热门小区及商区的方法
2019/04/08 Javascript
python中的多线程实例教程
2014/08/27 Python
Python 确定多项式拟合/回归的阶数实例
2018/12/29 Python
对Python强大的可变参数传递机制详解
2019/06/13 Python
Laravel框架表单验证格式化输出的方法
2019/09/25 Python
tensorflow 查看梯度方式
2020/02/04 Python
消防安全检查制度
2014/02/04 职场文书
师范教师专业大学生职业生涯规划范文
2014/03/02 职场文书
全国优秀辅导员事迹材料
2014/05/14 职场文书
企业文化标语大全
2014/06/10 职场文书
2014小学教师年度考核工作总结
2014/12/03 职场文书
中学生自我评价2015
2015/03/03 职场文书
详解NodeJS模块化
2021/06/15 NodeJs
CSS Transition通过改变Height实现展开收起元素
2021/08/07 HTML / CSS
一文搞懂MySQL索引页结构
2022/02/28 MySQL
win10如何更改appdata文件夹的默认位置?
2022/07/15 数码科技