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的妙用,实现路径加密
Jul 29 PHP
使用zend studio for eclipse不能激活代码提示功能的解决办法
Oct 11 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(一)
Jun 23 PHP
WordPress迁移时一些常见问题的解决方法整理
Nov 24 PHP
php实现文件预览功能
May 23 PHP
详解Yii2.0使用AR联表查询实例
Jun 16 PHP
PHP异常处理定义与使用方法分析
Jul 25 PHP
Laravel中unique和exists验证规则的优化详解
Jan 28 PHP
PHP排序算法之简单选择排序(Simple Selection Sort)实例分析
Apr 20 PHP
PHP+MariaDB数据库操作基本技巧备忘总结
May 21 PHP
PHP 图片合成、仿微信群头像的方法示例
Oct 25 PHP
PHP替换Word中变量并导出PDF图片的实现方法
Nov 26 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
咖啡豆要不要放冰箱的原因
2021/03/04 冲泡冲煮
优化NFR之一 --MSSQL Hello Buffer Overflow
2006/10/09 PHP
PHP UTF8编码内的繁简转换类
2009/07/20 PHP
php上传文件的增强函数
2010/07/21 PHP
ubuntu 编译安装php 5.3.3+memcache的方法
2010/08/05 PHP
android上传图片到PHP的过程详解
2015/08/03 PHP
Laravel 5.4因特殊字段太长导致migrations报错的解决
2017/10/22 PHP
Laravel框架实现抢红包功能示例
2019/10/31 PHP
JavaScript下申明对象的几种方法小结
2008/10/02 Javascript
JavaScript中的View-Model使用介绍
2011/08/11 Javascript
jquery插件锦集【推荐】
2016/12/16 Javascript
javascript简单链式调用案例分析
2017/05/10 Javascript
微信小程序之电影影评小程序制作代码
2017/08/03 Javascript
Angular实现下拉框模糊查询功能示例
2018/01/03 Javascript
layui复选框限制选择个数的方法
2019/09/18 Javascript
layui自定义工具栏的方法
2019/09/19 Javascript
解决vue.js提交数组时出现数组下标的问题
2019/11/05 Javascript
element-ui和vue表单(对话框)验证提示语(残留)清除操作
2020/09/11 Javascript
antd中table展开行默认展示,且不需要前边的加号操作
2020/11/02 Javascript
[01:39](回顾)各路豪强针锋相对,几经鏖战四强产生
2014/07/01 DOTA
学习python (2)
2006/10/31 Python
10种检测Python程序运行时间、CPU和内存占用的方法
2015/04/01 Python
利用Python写一个爬妹子的爬虫
2018/06/08 Python
对pycharm代码整体左移和右移缩进快捷键的介绍
2018/07/16 Python
pip指定python位置安装软件包的方法
2019/07/12 Python
django使用admin站点上传图片的实例
2019/07/28 Python
python中对_init_的理解及实例解析
2019/10/11 Python
新手入门学习python Numpy基础操作
2020/03/02 Python
python爬取”顶点小说网“《纯阳剑尊》的示例代码
2020/10/16 Python
台湾全方位线上课程与职能学习平台:TibaMe
2019/12/04 全球购物
自主招生自荐书
2013/11/29 职场文书
迟到检讨书800字
2014/01/13 职场文书
体育比赛口号
2014/06/09 职场文书
手术室护士个人总结
2015/02/13 职场文书
零基础学java之方法的定义与调用详解
2022/04/10 Java/Android
Python使用mitmproxy工具监控手机 下载手机小视频
2022/04/18 Python