Commit 3579e69fe2 for wordpress.org

commit 3579e69fe277e57c3dbdacd179f1d0d07d049f9a
Author: John Blackbourn <johnbillion@git.wordpress.org>
Date:   Thu Jan 16 15:35:27 2025 +0000

    Users: Retain the current session when a user changes their password.

    Prior to this change a new session was unnecessarily created when a user changed their own password.

    Existing authentication cookies for the user will still be invalidated regardless of whether they share the same session token because session cookie keys contain a substring of the password hash.

    Props snicco, narenin, johnbillion

    Fixes #61366

    Built from https://develop.svn.wordpress.org/trunk@59633


    git-svn-id: http://core.svn.wordpress.org/trunk@58996 1a063a9b-81f0-0310-95a4-ce76da25c4cd

diff --git a/wp-includes/user.php b/wp-includes/user.php
index 6222e932a9..635f82c5ed 100644
--- a/wp-includes/user.php
+++ b/wp-includes/user.php
@@ -2780,8 +2780,6 @@ All at ###SITENAME###
 	$current_user = wp_get_current_user();
 	if ( $current_user->ID === $user_id ) {
 		if ( isset( $plaintext_pass ) ) {
-			wp_clear_auth_cookie();
-
 			/*
 			 * Here we calculate the expiration length of the current auth cookie and compare it to the default expiration.
 			 * If it's greater than this, then we know the user checked 'Remember Me' when they logged in.
@@ -2790,13 +2788,20 @@ All at ###SITENAME###
 			/** This filter is documented in wp-includes/pluggable.php */
 			$default_cookie_life = apply_filters( 'auth_cookie_expiration', ( 2 * DAY_IN_SECONDS ), $user_id, false );

+			wp_clear_auth_cookie();
+
 			$remember = false;
+			$token    = '';
+
+			if ( false !== $logged_in_cookie ) {
+				$token = $logged_in_cookie['token'];
+			}

 			if ( false !== $logged_in_cookie && ( (int) $logged_in_cookie['expiration'] - time() ) > $default_cookie_life ) {
 				$remember = true;
 			}

-			wp_set_auth_cookie( $user_id, $remember );
+			wp_set_auth_cookie( $user_id, $remember, '', $token );
 		}
 	}

diff --git a/wp-includes/version.php b/wp-includes/version.php
index 3c3d557def..cc8c7e7dd5 100644
--- a/wp-includes/version.php
+++ b/wp-includes/version.php
@@ -16,7 +16,7 @@
  *
  * @global string $wp_version
  */
-$wp_version = '6.8-alpha-59632';
+$wp_version = '6.8-alpha-59633';

 /**
  * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.