|
<br> 在PHP下,关于session的讨论很多,其实在PHP4中还有几个函数是我们平时没有注意到的。 <BR><BR>下面我把它们介绍给大家吧。 <BR><BR>其中的session_set_save_handler()可真是个好东西。 <BR><BR>//******************** <BR>session_unset (PHP4 >= 4.0b4) <BR><BR>void session_unset(void); <BR><BR>这个函数可以把当然注册的所有的session变量置为空。注意它不是unregister,也不同于destroy。 <BR><BR>下面这个例子,对此函数做了很好的说明。 <BR><BR><?php <BR><BR>session_register("a","b","c"); //auto-session-start <BR>$a=1; <BR>$b=2; <BR>$c=3; <BR>session_unregister("a"); //unregistrered $a <BR>echo "A: $a - reg:".session_is_registered("a")." <BR>"; // but the global $a remains <BR>session_unset(); // unsets $b und $c <BR>echo "B b - reg:".session_is_registered("b")." <BR>"; // the registration remains ! <BR>echo "C c - reg:".session_is_registered("c")." <BR>"; <BR>echo session_encode(); <BR>?> <BR><BR>输出: <BR>A: 1 - reg: <BR>B: - reg:1 <BR>C: - reg:1 <BR>!b|!c| <BR><BR>//******************************** <BR>session_get_cookie_params (PHP4 >= 4.0RC2) <BR><BR>array session_get_cookie_params (void); <BR><BR>返回一个数组,记录了当前session的cookie的一些信息。 <BR>有: <BR><BR>"lifetime" - cookie的生存期。 <BR><BR>"path" - cookie的保存路径。 <BR><BR>"domain" - cookie的域。 <BR><BR>//******************************* <BR>session_set_cookie_params (PHP4 >= 4.0b4) <BR><BR>void session_set_cookie_params (int lifetime [, string path ][, string domain}) <BR><BR>设置session的cookie的一些参参数,类似于php.ini中的设置,但本函数所作的设置,只对当前脚本文件有效。 <BR><BR>//******************************* <BR><BR>下面要介绍的这个函数应是对大家都很有用的,你是不是对自定义一个不用cookie来保存的session有兴趣呢?这个函数就可以实现你这样的设想。 <BR><BR>让我想想,如果不用cookie的好处是什么?至少一点,你不用担心客户端的的cookie的功能是否打开了,对吧。 <BR><BR>session_set_save_handler (PHP4 >= 4.0b4) <BR><BR>void session_set_save_handler (string open, string close, string read, string write, string destroy, string gc) <BR><BR>这个函数可以定义用户级的session的保存函数(打开、关闭、写入等)。 <BR>比如,我们想把session保存在本地的一个数据库中时,本函数就很有用了。 <BR><BR>!!注意:使用本函数前,先要配置php.ini文件,session.save_hadler=user,否则,session_set_save_handler()不会生效。 <BR><BR>此外,根据我的测试,你如果想让这样的session跨页面使用,还要在每一个用到session的脚本文件中加入你自定的函数及session_set_save_handler,所以,最好的方法是做成一个单独的文件,在每一个要用到session的脚本中用include来包含进来。 <BR><BR>下面这个例子提供了一个最基本的session保存法,类似于默认的files方法。 <BR>如果你想用数据库来实现,这也是很容易做到的。 <BR><BR>Example 1. session_set_save_handler() example <BR><BR><?php <BR><BR>function open ($save_path, $session_name) { <BR>global $sess_save_path, $sess_session_name; <BR><BR>$sess_save_path = $save_path; <BR>$sess_session_name = $session_name; <BR>return(true); <BR>} <BR><BR>function close() { <BR>return(true); <BR>} <BR><BR>function read ($id) { <BR>global $sess_save_path, $sess_session_name; <BR><BR>$sess_file = "$sess_save_path/sess_$id"; <BR>if ($fp = @fopen($sess_file, "r")) { <BR>$sess_data = fread($fp, filesize($sess_file)); <BR>return($sess_data); <BR>} else { <BR>return(""); <BR>} <BR><BR>} <BR><BR>function write ($id, $sess_data) { <BR>global $sess_save_path, $sess_session_name; <BR><BR>$sess_file = "$sess_save_path/sess_$id"; <BR>if ($fp = @fopen($sess_file, "w")) { <BR>return(fwrite($fp, $sess_data)); <BR>} else { <BR>return(false); <BR>} <BR><BR>} <BR><BR>function destroy ($id) { <BR>global $sess_save_path, $sess_session_name; <BR><BR>$sess_file = "$sess_save_path/sess_$id"; <BR>return(@unlink($sess_file)); <BR>} <br><br> |
|