session_set_save_handler

(PHP 4 , PHP 5)

session_set_save_handler --  Imposta le funzioni di archiviazione sessioni a livello utente

Descrizione

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

session_set_save_handler() imposta le funzioni di archiviazione sessioni che sono usate per archiviare e riutilizzare i dati associati a una sessione. Ciò non è molto utile quando un altro metodo di archiviazione è preferito a quelli forniti dalle sessioni PHP. i.e. L'archiviazione dei dati di sessione in un database locale.

Nota: Dovete impostare l'opzione di configurazione session.save_handler per user nel vostro file php.ini perchè session_set_save_handler() abbia effetto.

Nota: L'handler "write" non viene eseguito fino a che l'output stream non viene chiuso. In questo modo, l'output di espressioni di debugging nell'hanlder "write" non si vedrà mai nel browser. Se l'output di debugging è necessario, è consigliabile che l'output del debug venga scritto in un file.

Il seguente esempio fornisce l'archiviazione di sessione basata su file simile al solito gestore di salvataggio di sessioni PHP files. Questo esempio potrebbe essere facilmente esteso per coprire l'archiviazione in database usando il vostro sistema database favorito con supporto PHP.

La funzione di lettura deve restituire sempre un valore stringa perchè il save handler funzioni a dovere. Restituisce una stringa vuota se non ci sono dati da leggere. I valori restituiti da altri handlers sono convertiti in espressioni booleane. TRUE per successo, FALSE in caso di fallimento.

Esempio 1. session_set_save_handler() esempio

<?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 restituire "" qui.
  
}

}

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));
}

/*********************************************
* ATTENZIONE - Qui avete bisogno di implementare qualche *
* sorta di routine per il cestinaggio.  *
*********************************************/
function gc ($maxlifetime) {
  return
true;
}

session_set_save_handler ("open", "close", "read", "write", "destroy", "gc");

session_start();

// proceed to use sessions normally

?>