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 相关文章推荐
加速XP搜索功能堪比vista
Mar 22 PHP
浅析PHP递归函数返回值使用方法
Feb 18 PHP
php判断访问IP的方法
Jun 19 PHP
Zend Framework教程之响应对象的封装Zend_Controller_Response实例详解
Mar 07 PHP
无需数据库在线投票调查php代码
Jul 20 PHP
php mysql like 实现多关键词搜索的方法
Oct 29 PHP
laravel中的一些简单实用功能
Nov 03 PHP
php实现每日签到功能
Nov 29 PHP
PHP的mysqli_sqlstate()函数讲解
Jan 23 PHP
JS(jQuery)实现聊天接收到消息语言自动提醒功能详解【提示“您有新的消息请注意查收”】
Apr 16 PHP
Laravel框架实现的上传图片到七牛功能详解
Sep 06 PHP
Yii框架小部件(Widgets)用法实例详解
May 15 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
用Zend Encode编写开发PHP程序
2006/10/09 PHP
php完全过滤HTML,JS,CSS等标签
2009/01/16 PHP
php 变量未定义等错误的解决方法
2011/01/12 PHP
调试PHP程序的多种方法介绍
2014/11/06 PHP
php调用KyotoTycoon简单实例
2015/04/02 PHP
ThinkPHP函数详解之M方法和R方法
2015/09/10 PHP
JavaScript 语法集锦 脚本之家基础推荐
2009/11/15 Javascript
jquery png 透明解决方案(推荐)
2010/08/21 Javascript
js arguments对象应用介绍
2012/11/28 Javascript
jquery制作select列表双向选择示例代码
2014/09/02 Javascript
javascript中字体浮动效果的简单实例演示
2015/11/18 Javascript
深入剖析JavaScript中的函数currying柯里化
2016/04/29 Javascript
JavaScript实现移动端滑动选择日期功能
2016/06/21 Javascript
jQuery Ajax 实现在html页面实时显示用户登录状态
2016/12/30 Javascript
JS计算输出100元钱买100只鸡问题的解决方法
2018/01/04 Javascript
vue通过路由实现页面刷新的方法
2018/01/25 Javascript
Vue项目服务器部署之子目录部署方法
2019/05/12 Javascript
mpvue网易云短信接口实现小程序短信登录的示例代码
2020/04/03 Javascript
基于JS+HTML实现弹窗提示是否确认提交功能
2020/06/17 Javascript
一篇超完整的Vue新手入门指导教程
2020/11/18 Vue.js
python网络编程学习笔记(一)
2014/06/09 Python
Python实现3行代码解简单的一元一次方程
2014/08/18 Python
python中返回矩阵的行列方法
2018/04/04 Python
Python实现多线程的两种方式分析
2018/08/29 Python
Python实现的线性回归算法示例【附csv文件下载】
2018/12/29 Python
python 成功引入包但无法正常调用的解决
2020/03/09 Python
详解pandas映射与数据转换
2021/01/22 Python
HTML5进度条特效
2014/12/18 HTML / CSS
英国领先的品牌珠宝和配件供应商:Acotis Jewellery
2018/03/07 全球购物
台湾SHOPRO购物行家:亚洲首创影视.3C.家电.优质购物平台
2018/05/07 全球购物
一份婚庆公司创业计划书
2014/01/11 职场文书
Nginx解决前端访问资源跨域问题的方法详解
2021/03/31 Servers
JavaScript 防篡改对象的用法示例
2021/04/24 Javascript
vue-cli4.5.x快速搭建项目
2021/05/30 Vue.js
threejs太阳光与阴影效果实例代码
2022/04/05 Javascript
SpringCloud超详细讲解Feign声明式服务调用
2022/06/21 Java/Android