当前位置: 首页 > 图文教程 > 网络编程 > PHP > 定制php4的session功能

PHP
PHP 执行系统外部命令 system() exec() passthru()
最新的php 文件上传模型,支持多文件上传
php 静态页面中显示动态内容
数据库查询记录php 多行多列显示
谈PHP生成静态页面分析 模板+缓存+写文件
PHP 各种排序算法实现代码
PHP nl2br函数 将换行字符转成 <br>
php 分页原理详解
Discuz 模板语句分析及知识技巧
php win下Socket方式发邮件类
怎样去阅读一份php源代码
建站常用13种PHP开源CMS比较
php xml留言板 xml存储数据的简单例子
PHP 开源AJAX框架14种
PHP 替换模板变量实现步骤
PHP has encountered an Access Violation at 7C94BD02解决方法
php 正则匹配函数体
php 文件夹删除、php清除缓存程序
php download.php实现代码 跳转到下载文件(response.redirect)
PHP类(Class)入门教程

PHP 中的 定制php4的session功能


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 348 ::
收藏到网摘: n/a

       来源:znsoft翻译
  
   定制php4的session功能
  
  把它EMAIL给我 我来谈谈我的看法
  
  
  
  这篇文章描述了怎样定制php4的session处理。我们提供一个怎样写一个全功能的基于mysql数据库或dbm文件的session处理程序例子。
  
  一、序言
  
  新的php4有一套自己的session处理函数。缺省情况下,每个session存贮在系统临时目录的一个个独立文件中(例如在unix系统中为/tmp)。
  这适合或不适合,依你的需求而言。例如:如果你的支持php的web服务器分布在不同的机器上,你不能很容易地共享它们之间的session(当然,你也可以将sessions保存在NFS共享中)。另一个潜在的问题是你机器上的数千或数百万个session文件使你的文件系统变得散乱 。
  对我们来说幸运的是,php4的开发者非常有远见(感谢他们),他们为你我这样的用户提供了扩展session处理的接口。
  
  这个文档解释一点session的处理并且提供两个能够工作的怎样扩展session处理的例子。我们的第一个例子将使session处理程序保存 session数据到DBM文件中。我们的第二个例子将保存session数据到MYSQL数据库中。
  在你开始之前,请下载ying20000602.zip 并且将它解开放到web文档目录中。(我已经将它带在本文的结尾处了)
  任何一个我们写的session处理程序会提供6个基本的函数,它们将被php4的session处理程序调用,所以你不用担心怎样调用它们。
  好在这些定制处理session的函数对你来说是完全透明的。所以你可以改动它们而不会影响你自己的PHP脚本。
  
  这几个函数是:
  sess_open($sess_path, $session_name);
  
  这个函数被session处理程序调用来作初始化工作。需要传给它的两个参数是$sess_path,它对应你的php.ini文件中的session.save_path选项;$session_name,它对应php.ini中的session.name选项。它们具体怎样工作,请看下面的例子。
  
  sess_close();
  
  这个函数在页面结束执行并且session处理程序需要关闭时被调用。(注意,不要和sess_destory混淆了,它是用来结束session的)
  
  sess_read($key);
  
  这个函数在session处理程序读取指定session键值($key)时。
  这个函数检索并返回标识为$key的session数据.(注意:你不用担心怎样序列化和反序列化数据,如果你不知道这是什么意思,不要担心它)
  
  译者注:序列化是将变量或对象在程序结束或需要时保存在文件中,在下次程序运行或需要时再调入内存的技术,有别于只保存数据的方法。
  
  sess_write($key, $val);
  
  这个函数据在session处理程序需要将数据保存时调用,这种情况经常在你的程序结束时发生。
  它负责将数据保存在下次能用sess_read($key)函数检索的地方。
  
  sess_destroy($key);
  
  这个函数在需要消毁session时。它负责删除session并且清除环境。
  
  sess_gc($maxlifetime);
  这个函数负责清理碎片。在这种情况下,它负责删除过时的session数据。session处理程序会偶尔调用它们。
  
  现在我们已经清楚了我们提供的函数。它们不是非要这样命名,但必须接受这些参数。(不管你需不需要它们)
  
  DBM session 处理程序
  
  我们的第一个范例是写一个保存session数据到DBM文件中的定制session处理程序。(这是ying20000602.zip中的session_dbm.php文件)
  
  有很多充足的理由让你要这样做,例如,如果你在isp那儿有一台共享的服务器(译注:相当于我们说的虚拟主机吧)并且你不想让你的session数据
  
  和别人的混在一起。
  
  重要注释:
  在你试验这些程序时你的php4必须有DBM支持。如果不是这样的(译注:如果没有DBM支持)会很难看,真的很难看!
  我们要做的这些工作将会得到一个所有session数据的DBM文件。(万一你不知道,DBM文件象一个仅保存"键/值"对的非常简单的数据库.
  由下面的6个函数据实现:
  
  
  sess_open($sess_path, $session_name);
  我们将调用dbmopen()打开一个处于读写模式的DBM文件。我们的DBM文件将被命名为/tm