[PHP] 自定义保存Session数据
简介:在PHP开发偶尔会遇到需要保存Session数据到数据库的要求,大多也是为了实现Session共享,自己简单的实践了PHP的自定义保存Session功能,用起来还是非常方便。 ? 原型:1.session_set_save_handler ( callable $open,callable $close,callable $read,callable $write,callable $destroy,callable $gc [,callable $create_sid [,callable $validate_sid [,callable $update_timestamp ]]] ) : bool 2.session_set_save_handler ( object $sessionhandler [,bool $register_shutdown = TRUE ] ) : bool ? 实践:1.调用session_start()之后,就会执行open → read → write → close ? 实例:class FileSessionHandler { private $savePath; function open($savePath,$sessionName) { echo __FUNCTION__."<BR>"; return true; } function close() { echo __FUNCTION__."<BR>"; return true; } function read($id) { echo __FUNCTION__."<BR>"; return ""; } function write($id,$data) { echo __FUNCTION__."<BR>"; return true; } function destroy($id) { echo __FUNCTION__."<BR>"; return true; } function gc($maxlifetime) { echo __FUNCTION__."<BR>"; return true; } function end(){ echo ‘我是最后脚本结束register_shutdown_functiond调用‘."<br>"; } } $handler = new FileSessionHandler(); session_set_save_handler( array($handler,‘open‘),array($handler,‘close‘),‘read‘),‘write‘),‘destroy‘),‘gc‘) ); // 下面这行代码可以防止使用对象作为会话保存管理器时可能引发的非预期行为 register_shutdown_function(array($handler,"end")); session_start(); ? 以上代码执行输出如下: open read 脚本执行结束 write close
Session数据的格式在read函数的返回值和write函数中的data参数中,都是全部Session数据的字符串,格式是这样: age|i:18;name|s:5:"Jerry"; ? age和name分别是两个Session变量,如果在read函数中返回上面的字符串数据,通过$_SEESION["age"]、$_SEESION["name"]可以读取到。 所以就是说我们可以在read函数中,人为地增加任何Session数据,不过这样做并没有什么实际用途。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |