session_set_save_handler,自定义Session处理

通过session_set_save_handler()来实现自定义session处理。

bool session_set_save_handler ( callback $open , callback $close , callback $read , callback $write , callback $destroy , callback $gc )

示例:

<?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类来处理

通过对象来处理,贴的代码来自67cms:

class fav_session
{
	var $lifetime = 1800;
 
    function __construct()
    {
    	session_set_save_handler(array(&$this,'open'), array(&$this,'close'), array(&$this,'read'), array(&$this,'write'), array(&$this,'destroy'), array(&$this,'gc'));
		session_start();
    }
 
    function fav_session()
    {
		$this->__construct();
    }
 
    function open($save_path, $session_name)
	{
		global $db,$CONFIG,$PHP_TIME;
	    $this->lifetime = 1800;
	    $this->time = $PHP_TIME;
		$this->pre = $CONFIG['tablepre'];
		$this->sess = &$db;
		return true;
    }
 
    function close()
	{
		$this->gc($this->lifetime);
        return $this->sess->close();
    } 
 
    function read($id)
	{
		$r = $this->sess->get_one("SELECT data FROM `{$this->pre}sessions` WHERE sessionid='$id'");
		return $r ? $r['data'] : '';
    } 
 
    function write($id, $sess_data)
	{
		global $PHP_TIME;
        $this->sess->query("REPLACE INTO `{$this->pre}sessions` (sessionid, data, lastvisit) VALUES('$id', '".addslashes($sess_data)."', '".$PHP_TIME."')");
		return true;
    } 
 
    function destroy($id)
	{ 
		$this->sess->query("DELETE FROM `{$this->pre}sessions` WHERE sessionid='$id'");
		return true;
    } 
 
    function gc($maxlifetime)
	{
		$expiretime = $this->time-$maxlifetime;
		$this->sess->query("DELETE FROM `{$this->pre}sessions` WHERE lastvisit<$expiretime");
		return true;
    }
}
php/session_set_save_handler.txt · 最后更改: 2010/05/12 18:06 由 admin
 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki