Codeigniter ajax(jquery)登录会话问题?

时间:2012-01-02 06:32:12

标签: php jquery ajax codeigniter

我是Codeigniter的新手,我在codeigniter中使用jquery创建了一个Login系统。但我坚持会话问题。当我从i提交登录时,将完美地工作并完美地创建会话但是当它在登录后重定向到下一页时,会话将自动销毁,并且它将一直返回到登录页面。

任何人都可以帮忙做些什么? 我的代码在

之下

管理控制器

    <?php
class Admin extends CI_Controller {
    function index()
    {
        $data['title'] = 'Admin Panel';
        $this->load->helper('auth');
        if(is_admin_loggedin(0)){ // Check if is login 
            //To display Dashboard Page
            $this->load->view('admin/index', $data);
        }else{
            //To display Login Page
            $this->load->view('admin/login/index', $data);
        }
    }

    function login_action(){
        $this->load->model('login_model');
        $query = $this->login_model->check_login();
        if($query){
            $data = array(
                'adminid' => $query[0]['AdminID'],
                'is_logged_in' => true
            );
            $this->load->library('session');
            $this->session->set_userdata($data);
            print_r($this->session);
            exit;
            //redirect('admin');
            $success = true;
            $success_redirect = true;
            $success_msg = site_url('admin');
            $error = false;
            $error_msg = '';            
        }else{
            $success = false;
            $success_redirect = false;
            $success_msg = site_url('admin');
            $error = true;
            $error_msg = 'Error, Wrong username or password!';
        }
        $passstring = array(
            'success' => $success,
            'success_msg' => $success_msg,
            'success_redirect' => $success_redirect,
            'error' => $error,
            'error_msg' => $error_msg
        );

        echo json_encode($passstring);
    }
}
?>

我创建了auth帮助文件,用于检查登录是否已设置。

auth_helper.php

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

if ( ! function_exists('is_admin_loggedin'))
{
    function is_admin_loggedin($reval){
        // Get current CodeIgniter instance
        $CI =& get_instance();
        // We need to use $CI->session instead of $this->session
        $adminid = $CI->session->userdata('adminid');
        $is_logged_in = $CI->session->userdata('is_logged_in');
        if($reval == 1){
            return $CI->session;
        }else{
            if(!isset($is_logged_in) || $is_logged_in != true || !isset($adminid) || $adminid != '')
            {
                return false;
            }else{
                return true;
            }
        }
    }
}
?>

login_model.php

<?php
class Login_Model extends CI_Model{

    public function __construct()
    {
        $this->load->database();
    }

    public function check_login(){
        //$this->form_validation->set_rules('username', 'User Name', 'trim|required');
        //$this->form_validation->set_rules('password', 'Password', 'trim|required');
        //if($this->form_validation->run() == FALSE){
            $this->db->where('UserName', $this->input->post('username'));
            $this->db->where('Password', md5($this->input->post('password')));
            $this->db->select('AdminID');
            $query = $this->db->get('admin');
            if($query->num_rows == 1)
            {
                return $query->result_array();
            }
        //}
    }
}
?>

我的视图文件代码

    <form action="<?php echo base_url();?>index.php/admin/login_action" method="post" name="LoginAdmin" id="LoginAdmin" >
                        <div class="error-container hide"></div>
                        <div class="login-box-row-wrap corners">
                            <label for="username">Username:</label><input type="text" id="username" value="" name="username" class="input-1"/>
                        </div>
                        <div class="login-box-row-wrap corners">
                            <label for="password">Password:</label> <input type="password" id="password" value="" name="password" class="input-1 password"/>    
                        </div>
                        <div class="login-box-row corners">
                            <input type="checkbox" name="remember" id="field-remember"/> <label for="field-remember">Remember me?</label>
                            <input type="submit" name="submitfrm" value="Login" id="submit"/>
                        </div>
                        </form>
<script type="text/javascript" language="javascript">
    $(document).ready(function (){
        var LoginID = '#LoginAdmin';
        $(LoginID).submit(function(){
        var errorselector = LoginID+' .error-container';
        $(errorselector).html('').hide();
        var username = $('#username').val();
        var paossword = $('#password').val();
        var isValid = 0;
        var errmsg = '';
        if(!checkblank(username) || !checkblank(paossword)){
            errmsg = 'Please fill all the fields.';
            isValid = 1;
        }
        if(isValid == 0){
            $('.loader').show();
            var urlred = $(this).attr('action');
            $.ajax({
                type: "POST",
                url: urlred,
                data: $(this).serialize(),
                dataType: "json",
                success: function(msg){
                    console.log(msg);
                    $('.loader').hide();
                    if (msg.success == false && msg.error == true) {
                        if(msg.error_msg != ''){
                            errormsg = msg.error_msg;
                        }else{
                            errormsg = 'Error, Something Worong';
                        }
                        $msgdis = '<div class="login-box-error-small corners"><p>'+errormsg+'</p></div>';
                        $(errorselector).html($msgdis).slideDown('slow');
                    }else if (msg.success == true && msg.error == false) {
                        if(msg.success_redirect == true){
                            window.location = msg.success_msg;
                        }else{
                            $msgdis = '<div class="login-box-succes-small corners"><p>'+msg.success_msg+'</p></div>';
                            $(errorselector).html($msgdis).slideDown('slow');
                        }
                    }
                    $(this).find('button.submitbutton').attr('disabled', '');
                },
                error: function(){
                    $('.ui-dialog-titlebar #ui-dialog-title-dialog').html('Error');
                    $('#dialog_text').html("There was an error submitting the form. Please try again.");
                    $('#dialog').dialog('open');
                    $(this).find('button.submitbutton').attr('disabled', '');
                }
            });
        }else{
            $msgdis = '<div class="login-box-error-small corners"><p>Error, '+errmsg+'</p></div>';
            $(errorselector).html($msgdis).slideDown('slow');
        }
        //make sure the form doesn't post
        return false;
    });
    });
    </script>

由于

1 个答案:

答案 0 :(得分:0)

在功能login_action()的控制器中删除exit。您停止了脚本,因此永远不会设置$passstring

所以这个函数应该是这样的:

function login_action(){
        $this->load->model('login_model');
        $query = $this->login_model->check_login();
        if($query){
            $data = array(
                'adminid' => $query[0]['AdminID'],
                'is_logged_in' => true
            );
            $this->load->library('session');
            $this->session->set_userdata($data);
            print_r($this->session);
            //exit; <-- remove this
            //redirect('admin');
            $success = true;
            $success_redirect = true;
            $success_msg = site_url('admin');
            $error = false;
            $error_msg = '';            
        }else{
            $success = false;
            $success_redirect = false;
            $success_msg = site_url('admin');
            $error = true;
            $error_msg = 'Error, Wrong username or password!';
        }
        $passstring = array(
            'success' => $success,
            'success_msg' => $success_msg,
            'success_redirect' => $success_redirect,
            'error' => $error,
            'error_msg' => $error_msg
        );

        echo json_encode($passstring);
    }
相关问题