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(""); // Deve retornar "" aqui.
}
}
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));
}
/************************************************
* AVISO - você precisa implementar alguns tipos*
* de rotinas de garbage collection aqui. *
************************************************/
function gc ($maxlifetime) {
return true;
}
session_set_save_handler ("open", "close", "read", "write", "destroy", "gc");
session_start();
// Use o resto da sessão normalmente
?>