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)提取出来的模板类
Jun 28 PHP
详解php的魔术方法__get()和__set()使用介绍
Sep 19 PHP
PHP 登录记住密码实现思路
May 07 PHP
php实现telnet功能示例
Apr 08 PHP
php集成套件服务器xampp安装使用教程(适合第一次玩PHP的新手)
Jun 03 PHP
PHP register_shutdown_function()函数的使用示例
Jun 23 PHP
php使用函数pathinfo()、parse_url()和basename()解析URL
Nov 25 PHP
PHP微信企业号开发之回调模式开启与用法示例
Nov 25 PHP
在php的yii2框架中整合hbase库的方法
Sep 20 PHP
PHP切割整数工具类似微信红包金额分配的思路详解
Sep 18 PHP
php连接mysql数据库最简单的实现方法
Sep 24 PHP
PHP CURL实现模拟登陆并上传文件操作示例
Jan 02 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闭包(Closure)使用详解
2013/05/02 PHP
PHP解密Unicode及Escape加密字符串
2015/05/17 PHP
PHP Cookie学习笔记
2016/08/23 PHP
Add a Table to a Word Document
2007/06/15 Javascript
JavaScript Array扩展实现代码
2009/10/14 Javascript
关于hashchangebroker和statehashable的补充文档
2011/08/08 Javascript
JS加jquery简单实现标签元素的显示或隐藏
2013/09/23 Javascript
Jquery中扩展方法extend使用技巧
2014/08/24 Javascript
js不能获取隐藏的div的宽度只能先显示后获取
2014/09/04 Javascript
jQuery中position()方法用法实例
2015/01/16 Javascript
jQuery使用cookie与json简单实现购物车功能
2016/04/15 Javascript
深入浅析Extjs中store分组功能的使用方法
2016/04/20 Javascript
JS传播事件、取消事件默认行为、阻止事件传播详解
2017/08/14 Javascript
js实现随机点名系统(实例讲解)
2017/10/18 Javascript
Node.js上传文件功能之服务端如何获取文件上传进度
2018/02/05 Javascript
基于JavaScript实现幸运抽奖页面
2020/07/05 Javascript
angular4 共享服务在多个组件中数据通信的示例
2018/03/30 Javascript
jQuery实现颜色打字机的完整代码
2020/03/19 jQuery
Vue实现附件上传功能
2020/05/28 Javascript
python中解析json格式文件的方法示例
2017/05/03 Python
python下载图片实现方法(超简单)
2017/07/21 Python
对python中大文件的导入与导出方法详解
2018/12/28 Python
Python 画出来六维图
2019/07/26 Python
Python批量启动多线程代码实例
2020/02/18 Python
python 使用cycle构造无限循环迭代器
2020/12/02 Python
python爬取股票最新数据并用excel绘制树状图的示例
2021/03/01 Python
html5基础标签(html5视频标签 html5新标签用法)
2013/12/30 HTML / CSS
快速实现一个简单的canvas迷宫游戏的示例
2018/07/04 HTML / CSS
Html5页面获取微信公众号的openid的方法
2020/05/12 HTML / CSS
ECHT官方网站:男女健身服
2020/02/14 全球购物
房产销售经理职责
2013/12/20 职场文书
致长跑运动员加油稿
2014/02/20 职场文书
五一劳动节活动记录
2014/03/23 职场文书
2016年中秋节寄语大全
2015/12/07 职场文书
Go使用协程交替打印字符
2021/04/29 Golang
SQL Server作业失败:无法确定所有者是否有服务器访问权限的解决方法
2021/06/30 SQL Server