VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > PHP >
  • php实现session自定义会话处理器的方法

这篇文章主要介绍了php实现session自定义会话处理器的方法,可通过设置session.save_handler为user来调用自定义的回调函数,从而实现session自定义会话处理器的功能,非常具有实用价值,需要的朋友可以参考下

本文实例讲述了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手册里也有:

  1. <?php 
  2. function open($save_path, $session_name) 
  3. { 
  4.   global $sess_save_path; 
  5.   $sess_save_path = $save_path; 
  6.   return(true); 
  7. } 
  8.  
  9. function close() 
  10. { 
  11.   return(true); 
  12. } 
  13.  
  14. function read($id) 
  15. { 
  16.   global $sess_save_path; 
  17.   $sess_file = "$sess_save_path/sess_$id"; 
  18.   return (string) @file_get_contents($sess_file); 
  19. } 
  20.  
  21. function write($id, $sess_data) 
  22. { 
  23.   global $sess_save_path; 
  24.   $sess_file = "$sess_save_path/sess_$id"; 
  25.   if ($fp = @fopen($sess_file, "w")) { 
  26.     $return = fwrite($fp, $sess_data); 
  27.     fclose($fp); 
  28.     return $return; 
  29.   } else { 
  30.     return(false); 
  31.   } 
  32. } 
  33.  
  34. function destroy($id) 
  35. { 
  36.   global $sess_save_path; 
  37.   $sess_file = "$sess_save_path/sess_$id"; 
  38.   return(@unlink($sess_file)); 
  39. } 
  40.  
  41. function gc($maxlifetime) 
  42. { 
  43.   global $sess_save_path; 
  44.   foreach (glob("$sess_save_path/sess_*") as $filename) { 
  45.     if (filemtime($filename) + $maxlifetime < time()) { 
  46.       @unlink($filename); 
  47.     } 
  48.   } 
  49.   return true; 
  50. } 
  51.  
  52. session_set_save_handler("open", "close", "read", "write", "destroy", "gc"); 
  53. session_start(); 
  54. // proceed to use sessions normally 
  55. ?> 

当你把 session.save_handler设置为user时,你可以把上面这段代码重写,改成你所需要的方法,在执行php文件里调用即可。比如,默认情况下,我们保存 session 的文件名,都是以 sess_ 开头的,其实就是在这里设置的,你可以改成你想要的。

当然,你也可以修改 session 保存的方式,默认是保存在文件里,您可以保存到数据库里(当然不建议你这么做,数据库读取速度更慢),也可以设置保存在内存里(速度最快,在memcache相关内容中有详细讲解)。

出处:http://www.phpfensi.com/php/20210509/15140.html

 


相关教程