Php 前端ajax用户登录会话问题

Php 前端ajax用户登录会话问题,php,ajax,wordpress,session,frontend,Php,Ajax,Wordpress,Session,Frontend,我遇到了一个问题,ajax登录表单允许我登录。如果我在登录后设置重定向到主页,它会将我发送到主页,并在顶部显示管理栏。但是,如果我尝试进入管理仪表板,它会要求我使用正常的wordpress登录再次登录 如何解决这个问题?我的代码: 在page-login.php模板中: <form id="login" class="ajax-auth" action="login" method="post"> <p class="status"></p>

我遇到了一个问题,ajax登录表单允许我登录。如果我在登录后设置重定向到主页,它会将我发送到主页,并在顶部显示管理栏。但是,如果我尝试进入管理仪表板,它会要求我使用正常的wordpress登录再次登录

如何解决这个问题?我的代码:

在page-login.php模板中:

<form id="login" class="ajax-auth" action="login" method="post">
    <p class="status"></p>  
    <?php wp_nonce_field('ajax-login-nonce', 'security'); ?>  
    <div class="form-group">
        <input id="username" placeholder="<?php _e('Username','my-theme'); ?>" type="text" class="required form-control" name="username">
    </div>
    <div class="form-group">
        <input id="password" placeholder="<?php _e('Password','my-theme'); ?>" type="password" class="required form-control" name="password">
    </div>
    <input class="btn btn-block btn-md btn-info" type="submit" value="<?php _e('Login','my-theme'); ?>">
</form>
和ajax-logreg-script.js文件:

jQuery(document).ready(function ($) {

    // Perform AJAX login/register on form submit
    $('form#login, form#register').on('submit', function (e) {
        if (!$(this).valid()) return false;
        $('p.status', this).show().text(ajax_auth_object.loadingmessage);
        action = 'ajaxlogin';
        username =  $('form#login #username').val();
        password = $('form#login #password').val();
        email = '';
        security = $('form#login #security').val(); 
        ctrl = $(this);
        $.ajax({
            type: 'POST',
            dataType: 'json',
            url: ajax_auth_object.ajaxurl,
            data: {
                'action': action,
                'username': username,
                'password': password,
                'email': email,
                'security': security,
            },
            success: function (data) {
                $('p.status', ctrl).text(data.message);
                if (data.loggedin == true)
                  document.location.href = ajax_auth_object.redirecturl;
                else if (ctrl == 'register')
                  grecaptcha.reset();
            }
        });
        e.preventDefault();
    });

    $(".logreg-page form#login").validate({
        ignore: ".ignore",
       rules: {
         username: {
            required: true,
          },
          password: {
            required: true,
          },
       },
       messages: {
          username: "Please enter an username.",
          password: "Please enter your password.",
        },
    });
});
试试这个代码

function auth_user_login($user_login, $password, $login){
  $info = array();
  $info['user_login'] = $user_login;
  $info['user_password'] = $password;
  $info['remember'] = true;

  $user_signon = wp_signon( $info, false );
    if ( is_wp_error($user_signon) ){
    echo json_encode(array('loggedin'=>false, 'message'=>__('Wrong password or username.','my-theme')));
    } else {   
    $userID = $user_signon->ID;
    wp_set_current_user( $userID, $user_login );
    wp_set_auth_cookie( $userID, true, false );
    echo json_encode(array('loggedin'=>true, 'message'=> $login.__(' successful, redirecting...','my-theme')));
    }

  die();
}

如果您的站点使用SSL,请将wp_signon函数的第二个参数设置为true

$user_signon = wp_signon( $info, true);

我想这是可行的,谢谢。但是,在刷新页面之前,管理栏不会出现。登录时如何进行缓存清理?如何使用SSL检查站点?正确与否有什么区别?当用户登录并需要刷新页面时,页脚中打印的管理栏内容。使用is_SSL()函数检查带有SSL的站点。但您不需要使用此函数,只需将其设置为true即可。如果我将wp_signon中的sucre cookie参数设置为“”,则问题已得到解决。我查过Wordpress Codex,这是默认参数。没有“真”或“假”。抱歉,这不起作用:(登录,但当我想进入仪表板时,会出现默认Wordpress登录屏幕。您以用户或管理员?管理员身份登录。我不允许用户访问管理员面板。前端有一个用户帐户页。您的站点是SSL?是,在本地工作。但我的站点是live:)如果我将wp_signon中的sucre cookie参数设置为“”,问题就解决了。我查过Wordpress Codex,这是默认参数。没有“真”或“假”。只有一个问题。用户登录后被重定向到主页。但是,管理栏不会出现,因为它是缓存的。当我刷新页面时,它会出现。如何在登录时自动刷新缓存?
$user_signon = wp_signon( $info, true);