我正在尝试通过AJAX将用户名和密码发送到数据库以验证用户,但我看到CI正在为单个请求创建重复会话。此外,当我尝试将userdata
设置为session->set_userdata
时,它不会设置数据。这是确认的,因为firebug和我的会话数据库都没有显示数据。此外,由于在会话中没有设置数据,因此我在AJAX响应中没有得到任何回复以显示AJAX响应成功
请指导我在这里做错了,因为即使用户名和密码组合错误,也会创建会话Cookie。
型号:
function validate_login()
{
$this->db->where('Useremail',$this->input->post('username'));
$this->db->where('Password',$this->input->post('password'));
$result = $this->db->get('users');
if ($result->num_rows == 1) {
return true;
}else{
return false;
}
}
控制器:
function validate_login_user()
{
$this->load->model('data_model');
if ($this->data_model->validate_login())
{
$data = array (
'username' => $this->input->post('username'),
'is_logged_in' => true
);
$this->session->set_userdata($data);
return = $this->session->userdata('username');
}
else
{
return false;
}
}
我的观点:
<script>
$(function() {
$('.login').click(function(){
var username = $('#username').attr('value');
var password = $('#password').attr('value');
if (username == "" || password == ""){
$('.LoginErrormsg').css('display','block');
}
if (username !== "" && password !== ""){
$.ajax({
url:"<?php echo site_url('home/validate_login_user');?>",
type:'POST',
data:{username:username,
password:password},
success:function(){
$('#sitelogin').html(msg);
$('.logout').css('display','block');
}
});
return false
}else{
return false;
}
});
})
</script>
<div id="sitelogin">
<input type="text" class="loginbox" name = "login_username" id = "username" placeholder="Email address / Username" />
<input type="password" class="loginbox" name = "login_password" id="password" placeholder="Password" />
<div class="LoginErrormsg">You forgot to enter Username and Password</div>
<button class="login" name = "login">Login</button>
<button class="logout" name = "logout">Logout</button>
</div>
</div>
答案 0 :(得分:1)
设置后无法立即获取会话数据,Codeigniter的会话实际上是cookie,只有页面重新加载...阅读更多here
答案 1 :(得分:0)
要解决此问题,您必须使用php或AJAX重新加载页面。
如果是php,您可以在成功时使用redirect()
。所以它不会回到AJAX。
如果AJAX使用window.location.replace("<?php echo base_url(); ?>index.php/controller/method");