session_set_save_handler
(PHP  4  >=  4.0b4)设置用户级  session  存储函数函数原型
void  session_set_save_handler  (string  open,  string  close,  string  read,  string  write,  string  destroy,  string  gc)
session_set_save_handler()  设置用户级  session  存储函数,用于存储和取回  session  相关的数据.  用于那些使用不同于  PHP  Session  指定的存储方式的情况.  例如,在本地数据库存储  session  数据.  注意:  你必须设置  php.ini  里面的  session.save_handler  配置参数来让  session_set_save_handler()  正常工作.  下面的例子提供了类似于  PHP  默认的保存文件句柄的基于文件的  session  storage  方式.  这个例子可以很简单的扩展到使用熟悉的数据库引擎来进行数据库存储.  
-------------------------------
session_get_cookie_params
(PHP  4  >=  4.0RC2)获得  session  cookie  参数函数原型
array  session_get_cookie_params  (void);
session_get_cookie_params()  返回当前  session  cookie  信息的数组,  数组包含下面的项目:  
"lifetime"  -  cookie  生命期.  "path"  -  信息存储的路径.  "domain"  -  cookie  的域名.  --------------------------------
session_set_cookie_params
(PHP  4  >=  4.0b4)设置  session  cookie  参数函数原型
void  session_set_cookie_params  (int  lifetime  [,  string  path  [,  string  domain]])
设置定义在  php.ini  文件里的  cookie  参数.  函数的影响只持续到脚本结束
--------------------------------
session_cache_limiter
(PHP  4  >=  4.0.3)获得/设置当前缓存限制函数原型
string  session_cache_limiter  ([string  cache_limiter])
session_cache_limiter()  返回当前缓存限制的名字.  如果指定了  cache_limiter,  当前的缓存限制的名字被改为新值.  缓存限制控制着  HTTP  头发送到客户端的缓存控制.  这些确定页面内容规则的头内容可以被缓存.如果设置缓存设置为没有缓存(nocache),  将不允许任何客户端缓存.  但是公共变量可以允许缓存.  他也可以设置为私有的,这个比公共的多一点限制.  缓存显示在请求开始时被重新设置为  session_cache_limiter  的默认值.这样,你需要在每次请求时调用  session_cache_limiter()  for  every  request  (在  session_start()  调用前).

解决方案 »

  1.   

    关于session的几个补充函数
    --------------------------------------------------------------------------------
     
      
      
    在PHP下,关于session的讨论很多,其实在PHP4中还有几个函数是我们平时没有注意到的。 下面我把它们介绍给大家吧。 其中的session_set_save_handler()可真是个好东西。 //******************** 
    session_unset (PHP4 >= 4.0b4) void session_unset(void); 这个函数可以把当然注册的所有的session变量置为空。注意它不是unregister,也不同于destroy。 下面这个例子,对此函数做了很好的说明。 <?php session_register('a','b','c'); //auto-session-start 
    $a=1; 
    $b=2; 
    $c=3; 
    session_unregister('a'); //unregistrered $a 
    echo "A: $a - reg:".session_is_registered('a')." 
    "; // but the global $a remains 
    session_unset(); // unsets $b und $c 
    echo "B:$b - reg:".session_is_registered('b')." 
    "; // the registration remains ! 
    echo "C:$c - reg:".session_is_registered('c')." 
    "; 
    echo session_encode(); 
    ?> 输出: 
    A: 1 - reg: 
    B: - reg:1 
    C: - reg:1 
    !b|!c| //******************************** 
    session_get_cookie_params (PHP4 >= 4.0RC2) array session_get_cookie_params (void); 返回一个数组,记录了当前session的cookie的一些信息。 
    有: "lifetime" - cookie的生存期。 "path" - cookie的保存路径。 "domain" - cookie的域。 //******************************* 
    session_set_cookie_params (PHP4 >= 4.0b4) void session_set_cookie_params (int lifetime [, string path [, string domain]]) 设置session的cookie的一些参参数,类似于php.ini中的设置,但本函数所作的设置,只对当前脚本文件有效。 
    //******************************* 下面要介绍的这个函数应是对大家都很有用的,你是不是对自定义一个不用cookie来保存的session有兴趣呢?这个函数就可以实现你这样的设想。 让我想想,如果不用cookie的好处是什么?至少一点,你不用担心客户端的的cookie的功能是否打开了,对吧。 
    session_set_save_handler (PHP4 >= 4.0b4) void session_set_save_handler (string open, string close, string read, string write, string destroy, string gc) 这个函数可以定义用户级的session的保存函数(打开、关闭、写入等)。 
    比如,我们想把session保存在本地的一个数据库中时,本函数就很有用了。 !!!注意:使用本函数前,先要配置php.ini文件,session.save_hadler=user ,否则,session_set_save_handler()不会生效。 此外,根据我的测试,你如果想让这样的session跨页面使用,还要在每一个用到session的脚本文件中加入你自定的函数及session_set_save_handler,所以,最好的方法是做成一个单独的文件,在每一个要用到session的脚本中用include来包含进来。 下面这个例子提供了一个最基本的session保存法,类似于默认的files方法。 
    如果你想用数据库来实现,这也是很容易做到的。 Example 1. session_set_save_handler() example <?php function open ($save_path, $session_name) { 
    global $sess_save_path, $sess_session_name; $sess_save_path = $save_path; 
    $sess_session_name = $session_name; 
    return(true); 
    } function close() { 
    return(true); 
    } function read ($id) { 
    global $sess_save_path, $sess_session_name; $sess_file = "$sess_save_path/sess_$id"; 
    if ($fp = @fopen($sess_file, "r")) { 
    $sess_data = fread($fp, filesize($sess_file)); 
    return($sess_data); 
    } else { 
    return(""); 
    } } function write ($id, $sess_data) { 
    global $sess_save_path, $sess_session_name; $sess_file = "$sess_save_path/sess_$id"; 
    if ($fp = @fopen($sess_file, "w")) { 
    return(fwrite($fp, $sess_data)); 
    } else { 
    return(false); 
    } } function destroy ($id) { 
    global $sess_save_path, $sess_session_name; $sess_file = "$sess_save_path/sess_$id"; 
    return(@unlink($sess_file)); 
    } /********************************************* 
    * WARNING - You will need to implement some * 
    * sort of garbage collection routine here. * 
    *********************************************/ 
    function gc ($maxlifetime) { 
    return true; 
    } session_set_save_handler ("open", "close", "read", "write", "destroy", "gc"); session_start(); // proceed to use sessions normally 
    // 现在你就可以象往常一样地使用session了。 
    ?> 
    //*************************************** session_cache_limiter (PHP4 CVS only) string session_cache_limiter ([string cache_limiter]) 本函数可以设置或取得session.cache_limiter的值。 
    在php.ini中也可以做同样的设置。其值有 nocache,public,private。 本函数是通过HTTP的header发送到客户端的。如果为nocache,将禁止任何客户端的cache。而public将允许cache,但是private相对public而言,更为安全一点。 缺省值是在php.ini中的设置,如果你要使用它,必须在每次调用session_start()之前调用本函数。 此函数现在只能在CVS模式下运行,但是PHP4.0.3将支持它。 
    Example 1. session_cache_limiter() examples <?php # set the cache limiter to 'private' session_cache_limiter('private); 
    $cache_limiter = session_cache_limiter(); echo "The cache limiter is now set to $cache_limiter<p>"; 
    ?> //*****************************  
      

  2.   

    session_set_save_handler(
            "sess_open", /* session_start()调用 */
            "sess_close", /* 程序结束时调用 */
            "sess_read", /* session_start()调用 */
            "sess_write", /* 程序结束时调用 */
            "sess_destroy", /* session_destroy()调用 */
            "sess_gc" /* 操作系统gc进程调用 */
    );
    通知php使用自定义的session处理函数来操作session,而不使用php预置的方法
      

  3.   

    偶买嘎的,太长了其实不过是简单的一句话而已,
    引用一下唠叨的:通知php使用自定义的session处理函数来操作session,而不使用php预置的方法!当然你也可以把session存放到数据库里面