diff options
Diffstat (limited to 'modules/user/user.module')
-rw-r--r-- | modules/user/user.module | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/modules/user/user.module b/modules/user/user.module index 06233fcdf..1b4f86988 100644 --- a/modules/user/user.module +++ b/modules/user/user.module @@ -2419,6 +2419,14 @@ function user_cancel($edit, $uid, $method) { array('_user_cancel', array($edit, $account, $method)), ), ); + + // After cancelling account, ensure that user is logged out. + if ($account->uid == $user->uid) { + // Batch API stores data in the session, so use the finished operation to + // manipulate the current user's session id. + $batch['finished'] = '_user_cancel_session_regenerate'; + } + batch_set($batch); // Batch processing is either handled via Form API or has to be invoked @@ -2461,10 +2469,12 @@ function _user_cancel($edit, $account, $method) { break; } - // After cancelling account, ensure that user is logged out. + // After cancelling account, ensure that user is logged out. We can't destroy + // their session though, as we might have information in it, and we can't + // regenerate it because batch API uses the session ID, we will regenerate it + // in _user_cancel_session_regenerate(). if ($account->uid == $user->uid) { - // Destroy the current session, and reset $user to the anonymous user. - session_destroy(); + $user = drupal_anonymous_user(); } // Clear the cache for anonymous users. @@ -2472,6 +2482,17 @@ function _user_cancel($edit, $account, $method) { } /** + * Finished batch processing callback for cancelling a user account. + * + * @see user_cancel() + */ +function _user_cancel_session_regenerate() { + // Regenerate the users session instead of calling session_destroy() as we + // want to preserve any messages that might have been set. + drupal_session_regenerate(); +} + +/** * Delete a user. * * @param $uid |