(PHP 4, PHP 5)
session_set_save_handler — Define a sequência de funções de armazenamento
$open
, callback $close
, callback $read
, callback $write
, callback $destroy
, callback $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 caso de falha.
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.
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.
Os manipuladores Write e Close são chamados após os objetos serem destruídos desde o PHP 5.0.5. Então destruidores podem usar sessões mas o manipulador de sessão não pode usar objetos. Em versões anteriores, eles eram chamados na ordem oposta. è possível usar session_write_close() a partir do destruidor para resolver este problema da galinha e do ovo.
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.