2015-04-22 23 views
5

Da manuale ufficiale php:Cosa fa effettivamente session_register_shutdown?

session_register_shutdown - Sessione funzione di spegnimento

Registri session_write_close() come una funzione di spegnimento.

Quindi, che cosa significa arresto sessione? Qual è la differenza tra session_write_close e questo?

Per rendere chiaro, cosa fa effettivamente questa funzione? Quando lo useremo?

Sembra che poche persone stiano usando e parlando di questa funzione sul web.

+0

Hai letto il resto della pagina? "Registra session_write_close() come funzione di arresto." Il commento dell'utente che fornisce un equivalente per le vecchie versioni di PHP rende anche abbastanza chiaro ciò che fa. – IMSoP

+3

Sto votando per chiudere questa domanda come off-topic perché questa domanda può essere risolta leggendo la documentazione su http://php.net/session_register_shutdown – Sven

+3

Naturalmente ho letto, ma continuo a non capire. "Registra session_write_close() come funzione di arresto." Quando e perché possiamo usare questa funzione? –

risposta

6

Questa funzione viene utilizzata raramente in realtà, non v'è quasi nessuna discussione su internet, ho finalmente trovato la risposta dai commenti del codice sorgente:

/* This function is registered itself as a shutdown function by 
* session_set_save_handler($obj). The reason we now register another 
* shutdown function is in case the user registered their own shutdown 
* function after calling session_set_save_handler(), which expects 
* the session still to be available. 

Da: https://github.com/php/php-src/blob/master/ext/session/session.c

E, ovviamente, a confronto al manuale ufficiale, questo indica chiaramente cosa fa esattamente.

Questa domanda è semplicemente stupida.

+0

Grazie, questo mi ha aiutato molto! Questo dovrebbe essere nei documenti online! – oucil

3

Questa è una domanda giusta. Sono stato anche confuso dalla documentazione.

Quello che sono stato in grado di estrarre dopo averlo letto una dozzina di volte è che la funzione è solo una versione scorciatoia del codice

register_shutdown_function('session_write_close');

Se si chiama die() o l'uscita in uno script php la la sessione non verrà chiusa correttamente (specialmente se si dispone di un gestore di sessioni personalizzato). Questa funzione non è altro che una scorciatoia.

Il mio codice di bootstrap per il mio specifico gestore di sessione appare come:

// Set the session handlers to the custom functions. 
$handler = new SQLSrvSessionHandler(); 
session_set_save_handler(
    array($handler, 'sessionOpen'), 
    array($handler, 'sessionClose'), 
    array($handler, 'sessionRead'), 
    array($handler, 'sessionWrite'), 
    array($handler, 'sessionDestroy'), 
    array($handler, 'sessionGC') 
); 
session_register_shutdown(); 

La funzione session_register_shutdown assicura la mia funzione SQLSrvSessionHandler::sessionClose e SQLSrvSessionHandler::sessionWrite sono chiamati, anche se ho eseguito un dado o di uscita dichiarazioni.

Ho trovato anche this answer utile.

Problemi correlati