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中使用Oracle数据库(4)
Oct 09 PHP
PHP IN_ARRAY 函数使用注意事项
Jul 24 PHP
php牛逼的面试题分享
Jan 18 PHP
PHP中提问频率最高的11个面试题和答案
Sep 02 PHP
PHP获取数组中重复最多的元素的实现方法
Nov 11 PHP
启用Csrf后POST数据时出现的400错误
Jul 05 PHP
一段实用的php验证码函数
May 19 PHP
Yii视图CGridView实现操作按钮定义地址示例
Jul 14 PHP
php四种定界符详解
Feb 16 PHP
PHP实现批量删除(封装)
Apr 28 PHP
php生成毫秒时间戳的实例讲解
Sep 22 PHP
PHP框架实现WebSocket在线聊天通讯系统
Nov 21 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
全国FM电台频率大全 - 21 海南省
2020/03/11 无线电
用文本文件实现的动态实时发布新闻的程序
2006/10/09 PHP
php 静态变量与自定义常量的使用方法
2010/01/26 PHP
PHP实现可精确验证身份证号码的工具类示例
2018/05/31 PHP
jquery插件制作简单示例说明
2012/02/03 Javascript
浅析JS中document对象的一些重要属性
2014/03/06 Javascript
JavaScript动态改变表格单元格内容的方法
2015/03/30 Javascript
jQuery实现仿QQ在线客服效果的滚动层代码
2015/10/15 Javascript
javascript jquery对form元素的常见操作详解
2016/06/12 Javascript
js实现右键菜单功能
2016/11/28 Javascript
jquery实现左右滑动式轮播图
2017/03/02 Javascript
jQuery使用eraser.js插件实现擦除、刮刮卡效果的方法【附eraser.js下载】
2017/04/28 jQuery
浅谈AngularJS中$http服务的简单用法
2018/05/15 Javascript
解决JavaScript中0.1+0.2不等于0.3问题
2018/10/23 Javascript
Nuxt.js之自动路由原理的实现方法
2018/11/21 Javascript
JS中的函数与对象的创建方式
2019/05/12 Javascript
微信小程序实现张图片合成为一张并下载
2019/07/16 Javascript
js prototype和__proto__的关系是什么
2019/08/23 Javascript
JS表格的动态操作完整示例
2020/01/13 Javascript
Python算术运算符实例详解
2017/05/31 Python
Python引用计数操作示例
2018/08/23 Python
python 处理telnet返回的More,以及get想要的那个参数方法
2019/02/14 Python
Django模型修改及数据迁移实现解析
2019/08/01 Python
基于Python批量生成指定尺寸缩略图代码实例
2019/11/20 Python
2020新版本pycharm+anaconda+opencv+pyqt环境配置学习笔记,亲测可用
2020/03/24 Python
PyQt5实现简单的计算器
2020/05/30 Python
Python如何将模块打包并发布
2020/08/30 Python
让你相见恨晚的十个Python骚操作
2020/11/18 Python
HTTP状态码详解
2021/03/18 杂记
C语言开发工程师测试题
2016/12/20 面试题
生物技术专业毕业生求职信范文
2013/12/14 职场文书
教师应聘自荐信范文
2014/03/14 职场文书
学校班班通实施方案
2014/06/11 职场文书
一份没有按时交货失信于客户的检讨书
2014/09/19 职场文书
2015年组织部工作总结
2015/04/03 职场文书
党员个人承诺书
2015/04/27 职场文书