session_set_save_handler
(PHP 4, PHP 5)
session_set_save_handler -- Sets user-level session storage functions
Description
bool
session_set_save_handler ( callback open, callback close, callback read, callback write, callback destroy, callback 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.
Parameters
open
close
read
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
Note:
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.
destroy
gc
Return Values
Returns TRUE on success or FALSE on failure.
Examples
Example 1. session_set_save_handler() example
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.
<?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
?>
|
|
Notes
Warning |
As of PHP 5.0.5 the write and
close handlers are called after object
destruction and therefore cannot use objects or throw exceptions.
The object destructors can however use sessions.
It is possible to call session_write_close() from the
destructor to solve this chicken and egg problem.
|