Php 前端ajax用户登录会话问题
我遇到了一个问题,ajax登录表单允许我登录。如果我在登录后设置重定向到主页,它会将我发送到主页,并在顶部显示管理栏。但是,如果我尝试进入管理仪表板,它会要求我使用正常的wordpress登录再次登录 如何解决这个问题?我的代码: 在page-login.php模板中: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>
<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);