session_set_save_handler

(PHP 4 , PHP 5)

session_set_save_handler --  Define a sequência de funções de armazenamento

Descrição

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

session_set_save_handler() define a sequência de funções de armazenamento que é usada para guardar e devolver dados associados à sessão. Esta é mais usual quando um quando um método de armazenamento, a não ser que aquele oferecido por sessões do PHP seja preferível. i.e. Guardar dados de sessão em um banco de dados local. Retorna TRUE em caso de sucesso ou FALSE em falhas.

Nota: A função "write" handler não é executada até depois que o fluxo de saída esteja fechado. Assim, a saída de instruções debugging na função "write" handler poderá nunca ser vista pelo navegador. Se a saída debugging é necessária, ao invés disso é sugerido que a saída debug seja escrita para um arquivo.

Nota: A função "write" handler não é executada se a sessão não contém dados; isto se aplica sempre se variáveis de sessão vazias são registradas. Esta difere à sessão padrão de save handler baseado em arquivos, que cria arquivos de sessão vazios.

O seguinte exemplo oferece um aramzenamento de sessão baseado em arquivos similar a sessões de PHP padrões save handler files. Este exemplo poderia facilmente ser extendido para outras bases de dados usando seu gerente de banco de dados favorito suportado pelo PHP.

A função "Read" deve retornar um valor string sempre que fizer o save handler trabalhar como o esperado. Retorna uma string vazia se não existe dados para ler. Retorna valores de outros handlers que estejam convertidos para expressões booleanas. TRUE em sucesso, FALSE em falha.

Exemplo 1. session_set_save_handler() exemplo

<?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($fp, filesize($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

?>

Veja também a diretiva de configuração session.save_handler.