(PHP 4, PHP 5)
session_set_save_handler — Задава потребителски функции за съхранение на сесията
Функцията session_set_save_handler() задава потребителски функции за съхранение на сесията, които се използват за съхранение и извличане на данните на сесията. Това се използва най-често когато е предпочетен друг метод на съхранение от предложените в PHP сесиите, като например съхранение на данните на сесията в база от данни.
Функцията Read винаги трябва да връща низ, за да може записващият манипулатор да работи, както се очаква. Връща празен низ, ако няма никакви данни за четене. Върнатите стойности от други манипулатори се преобразуват до булеви. Връща TRUE при успех или FALSE при грешка.
Забележка: Манипулаторът "write" не се изпълнява докато процеса на извеждане не приключи. По този начин, извеждане от изрази за отстраняване на грешки в манипулатора "write" никога няма да се покаже в браузъра. Ако отпечатването на изрази за отстраняване на грешки е наложително, предполага се, че изхода от процеса на отстраняване на грешки, вместо това ще бъде записан във файл.
Връща TRUE при успех или FALSE при неуспех.
Example #1 Пример за session_set_save_handler()
Следният пример представя съхранение на сесии на базата на файлове, подобно на записващият манипулатор по подразбиране на сесиите в PHP files . Този пример лесно може да бъде разширен да поддържа съхранение в база от данни, използвайки любимата си база от данни, поддържана от PHP.
<?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();
// преминаване към нормално използване на сесията
?>
От PHP 5.0.5, манипулаторите от вида write и close се извикват след като се унищожат обектите. По този начин деструкторът може да използва сесия, но манипулатора на сесията не може да използва обекти.
Възможно е да извикате session_write_close() от деструктора, за да решите този проблем - тип "яйцето или кокошката".
Моментната работна директория се променя при някои SAPI-та ако сесията е затворена при спирането на скрипта. Възможно е да затворите сесията по-рано чрез функцията session_write_close().