session_set_save_handler

(PHP 4, PHP 5)

session_set_save_handler --  Sets user-level session storage functions

Description

bool session_set_save_handler ( string open, string close, string read, string write, string destroy, string gc )

session_set_save_handler() sets the user-level session storage functions which are used for storing and retrieving data associated with a session. This is most useful when a storage method other than those supplied by PHP sessions is preferred. i.e. Storing the session data in a local database. 若果成功則返回 TRUE,失敗則返回 FALSE

注: The "write" handler is not executed until after the output stream is closed. Thus, output from debugging statements in the "write" handler will never be seen in the browser. If debugging output is necessary, it is suggested that the debug output be written to a file instead.

The following example provides file based session storage similar to the PHP sessions default save handler files. This example could easily be extended to cover database storage using your favorite PHP supported database engine.

Read function must return string value always to make save handler work as expected. Return empty string if there is no data to read. Return values from other handlers are converted to boolean expression. TRUE for success, FALSE for failure.

警示

Write and Close handlers are called after destructing objects since PHP 5.0.5. Thus destructors can use sessions but session handler can't use objects. In prior versions, they were called in the opposite order. It is possible to call session_write_close() from the destructor to solve this chicken and egg problem.

例子 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($fpfilesize($sess_file));
    return(
$sess_data);
  } else {
    return(
""); // Must return "" here.
  
}

}

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

?>

See also the session.save_handler configuration directive.