What does session_register_shutdown actually do?

This function is rarely used actually, there is almost no discussion on the internet, I finally found the answer from the source code comments:

/* 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.

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

And, obviously, compared to the official manual, this clearly states what it exactly do.

This question is just looks silly.


This is a fair question. I was also confused by the documentation.

What I was able to extract after reading it a dozen times is that the function is just a shortcut version of the code

register_shutdown_function('session_write_close');

If you call die() or exit in a php script the session will not be properly closed (especially if you have a custom session handler). This function is nothing more than a shortcut.

My bootstrap code for my specific session handler looks like:

// 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();

The function session_register_shutdown insures my function SQLSrvSessionHandler::sessionClose and SQLSrvSessionHandler::sessionWrite are called even if I run a die or exit statements.

I also found this answer helpful.

Tags:

Php