Функции за сесии
PHP Manual

session_set_save_handler

(PHP 4, PHP 5)

session_set_save_handlerЗадава потребителски функции за съхранение на сесията

Описание

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

Функцията session_set_save_handler() задава потребителски функции за съхранение на сесията, които се използват за съхранение и извличане на данните на сесията. Това се използва най-често когато е предпочетен друг метод на съхранение от предложените в PHP сесиите, като например съхранение на данните на сесията в база от данни.

Параметри

open

close

read

Функцията Read винаги трябва да връща низ, за да може записващият манипулатор да работи, както се очаква. Връща празен низ, ако няма никакви данни за четене. Върнатите стойности от други манипулатори се преобразуват до булеви. Връща TRUE при успех или FALSE при грешка.

write

Забележка: Манипулаторът "write" не се изпълнява докато процеса на извеждане не приключи. По този начин, извеждане от изрази за отстраняване на грешки в манипулатора "write" никога няма да се покаже в браузъра. Ако отпечатването на изрази за отстраняване на грешки е наложително, предполага се, че изхода от процеса на отстраняване на грешки, вместо това ще бъде записан във файл.

destroy

gc

Връщани стойности

Връща 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().

Вж. също


Функции за сесии
PHP Manual