本文实例讲述了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手册里也有:
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 保存的方式,默认是保存在文件里,您可以保存到数据库里(当然不建议你这么做,数据库读取速度更慢),也可以设置保存在内存里(速度最快,在memcache相关内容中有详细讲解)。
希望本文所述对大家的PHP程序设计有所帮助。