2012-01-02 159 views
1

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

任何人都可以帮助在那做什么? 我的代码如下

管理控制器

<?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> 

感谢

+0

你有没有在autoload.php加入会议? – 2012-01-02 06:39:08

+0

是的,现在这个会话在autoload.php中被封装了。 – 2012-01-02 06:39:40

回答

0

在你的控制器在功能上login_action() REM Ove 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); 
    }