WordPress.org

Make WordPress Core

Ticket #7561: 7561.diff

File 7561.diff, 2.1 KB (added by ryan, 6 years ago)
  • wp-login.php

     
    407407 
    408408case 'login' : 
    409409default: 
    410         if ( isset( $_REQUEST['redirect_to'] ) ) 
     410        $secure_cookie = ''; 
     411 
     412        // If the user wants ssl but the session is not ssl, force a secure cookie. 
     413        if ( !empty($_POST['log']) && !force_ssl_admin() ) { 
     414                $user_name = sanitize_user($_POST['log']); 
     415                if ( $user = get_userdatabylogin($user_name) ) { 
     416                        if ( get_user_option('use_ssl', $user->ID) ) { 
     417                                $secure_cookie = true; 
     418                                force_ssl_admin(true); 
     419                        } 
     420                } 
     421        } 
     422 
     423        if ( isset( $_REQUEST['redirect_to'] ) ) { 
    411424                $redirect_to = $_REQUEST['redirect_to']; 
    412         else 
     425                // Redirect to https if user wants ssl 
     426                if ( $secure_cookie ) 
     427                        $redirect_to = preg_replace('|^http://|', 'https://', $redirect_to); 
     428        } else { 
    413429                $redirect_to = admin_url(); 
     430        } 
    414431 
    415         if ( is_ssl() && force_ssl_login() && !force_ssl_admin() && ( 0 !== strpos($redirect_to, 'https') ) && ( 0 === strpos($redirect_to, 'http') ) ) 
     432        if ( !$secure_cookie && is_ssl() && force_ssl_login() && !force_ssl_admin() && ( 0 !== strpos($redirect_to, 'https') ) && ( 0 === strpos($redirect_to, 'http') ) ) 
    416433                $secure_cookie = false; 
    417         else 
    418                 $secure_cookie = ''; 
    419434 
    420435        $user = wp_signon('', $secure_cookie); 
    421436 
  • wp-includes/pluggable.php

     
    703703                } 
    704704        } 
    705705 
    706         if ( wp_validate_auth_cookie() ) 
     706        if ( $user_id = wp_validate_auth_cookie() ) { 
     707                // If the user wants ssl but the session is not ssl, redirect. 
     708                if ( !$secure && get_user_option('use_ssl', $user_id) ) { 
     709                        if ( 0 === strpos($_SERVER['REQUEST_URI'], 'http') ) { 
     710                                wp_redirect(preg_replace('|^http://|', 'https://', $_SERVER['REQUEST_URI'])); 
     711                                exit(); 
     712                        } else { 
     713                                wp_redirect('https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); 
     714                                exit(); 
     715                        } 
     716                } 
     717 
    707718                return;  // The cookie is good so we're done 
     719        } 
    708720 
    709721        // The cookie is no good so force login 
    710722        nocache_headers();