From e26ef638ee3fee9c8eddd5c7ce6fcefa7f883bed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Hojtsy?= Date: Mon, 1 Oct 2007 09:39:27 +0000 Subject: #178999 by sammys: register header(Location) as a shutdown function in drupal_goto() so the redirection takes place after the session data was written to the database --- includes/common.inc | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'includes') diff --git a/includes/common.inc b/includes/common.inc index 299924c93..40efc961a 100644 --- a/includes/common.inc +++ b/includes/common.inc @@ -306,11 +306,13 @@ function drupal_goto($path = '', $query = NULL, $fragment = NULL, $http_response // Before the redirect, allow modules to react to the end of the page request. module_invoke_all('exit', $url); - header('Location: '. $url, TRUE, $http_response_code); - - // The "Location" header sends a REDIRECT status code to the http - // daemon. In some cases this can go wrong, so we make sure none - // of the code below the drupal_goto() call gets executed when we redirect. + // Here we register header() to be called after exit(). Because + // session_write_close() was registered before header() all session + // data will be written to the database before the header is sent to the + // browser. + register_shutdown_function('header', "Location: $url", TRUE, $http_response_code); + + // Make sure none of the code below the drupal_goto() call gets executed. exit(); } -- cgit v1.2.3