2014-01-20 7 views
1

Я пытаюсь создать сеанс в Codeigniter. Я загрузил библиотеку session и encrypt в автозагрузке. По умолчанию открывается страница login.php. Я хочу открыть страницу dashboard.php, если пользователь уже вошел в систему. Я написал следующий код, но он открывает страницу login.php даже после входа в систему.Как проверить сеанс в кодеригенере?

Просьба сообщить, как проверить, установлен ли сеанс или нет.

public function index() 
{   
    $data['products_data']= $this->products_model->all_products(); 
      // $this->load->view('login'); 

    $this->form_validation->set_rules('username','Username','required'); 
    $this->form_validation->set_rules('password','Password','required'); 

    if ($this->form_validation->run()== false) 
    { 
     $this->load->view('login');   
    } 
    else 
    { 
     if ($this->session->userdata('login_status')) { 

      $this->load->view('header'); 
      $this->load->view('dashboard'); 
      $this->load->view('footer'); 

     } 
     else 
     { 
      $username= $this->input->post('username'); 
      $password= $this->input->post('password'); 

      if($this->products_model->login_model($username,$password)) 
      { 
       $sess_data= array(
           'username'=> $username, 
           'login_status'=>'1' 
           ); 

       $session_data = $this->session->set_userdata($sess_data);      

       $this->load->view('header'); 
       $this->load->view('dashboard'); 
       $this->load->view('footer'); 

      } 

     } 
    } 


} 

ответ

2
$sessdata = $this->session->set_userdata($session_data); 
if (isset($sessdata)) 
{ 
//session exists 
} 
else{ 
// no session value 
} 

Так Ваш контроллер должен выглядеть, как показано ниже, чтобы избежать перенаправления на страницу входа в систему при обновлении страницы,

function index() { 
    if ($this->session->userdata('login_status')) { 
     //write your code for redirect to dashboard 
    } else { 
     $data['products_data'] = $this->products_model->all_products(); 
     $this->form_validation->set_rules('username', 'Username', 'required'); 
     $this->form_validation->set_rules('password', 'Password', 'required'); 
     if ($this->form_validation->run() == false) { 

      $this->load->view('login'); 
     } else { 
      $username = $this->input->post('username'); 
      $password = $this->input->post('password'); 
      if ($this->products_model->login_model($username, $password)) { 
       $sess_data = array(
        'username' => $username, 
        'login_status' => '1' 
       ); 
       $session_data = $this->session->set_userdata($sess_data); 
       //write your code for redirect to dashboard 
      } 
     } 
    } 
} 
+0

Я обновил свой код. Еще после входа в систему, когда я обновляю страницу, он отправляет меня обратно в login.php..и теперь после входа в систему его открытие пустой страницы. Просьба проверить это. Спасибо –

+1

'if ($ this-> products_model-> login_model ($ username, $ password)) {} else {// ваш код входа}'. Проверьте, включено ли условие if или false. После его истины будет проверяться только проверка сеанса. –

+0

@AftabAamir проверить мой ответ, ваш '$ sess_data' на' set_userdata' имеет один qoute, удалить его, потому что он обрабатывает его как обычную строку. – tomexsans

1

Я скорее хотел бы создать еще один контроллер для приборной панели и перенаправить его туда после успешного входа. Он чист, и вы можете сделать дальнейшие изменения легко

if($this->products_model->login_model($username,$password)) 
{ 
    $sess_data= array(
     'username'=> $username 
    ); 

    $session_data = $this->session->set_userdata($sess_data); 

    if(isset($session_data)) 
     redirect(site_url('/dashboard/')); 

} 

FM: $ sess_data не должны быть в одинарных кавычках

+0

Если я использую redirect, то как бы загрузить верхний и нижний колонтитулы? –

+0

Напишите следующий код в вашей индексной функции контроллера панели $ this-> load-> view ('header'); $ this-> load-> view ('dashboard'); $ this-> load-> view ('footer'); поэтому, когда вы приземлитесь там, загрузите заголовок и нижний колонтитул – Hassan

1

я буду использовать сеанс для записи состояния входа.

$session_data= array(
    'username'=> $username, 
    'lgoin_status' => 1 
); 

$this->session->set_userdata('$session_data'); 

И я проверю сеанса login_status

if ($this->session->userdata('login_status')) { 
    // do something 
} 

Редактировать

На вашем коде, вы должны проверить сессию в первом, так ..

public function index() 
{ 
    if ($this->session->userdata('login_status')) 
    { 
     // do something 
    } 
    else 
    { 

    $data['products_data']= $this->products_model->all_products(); 

    $this->form_validation->set_rules('username','Username','required'); 
    $this->form_validation->set_rules('password','Password','required'); 

    if ($this->form_validation->run()== false) 
    { 
     $this->load->view('login');   
    } 
    ... 
} 
+0

Спасибо, я обновил свой код, теперь его успешно запустил и открыл dashboard.php, но все же, когда я revisit login.php, он открывает логин формы и не перенаправляет меня на панель инструментов. –

+0

Вы можете проверить сеанс на '' '' '' '' '' контроллера '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' – lighter

1

Вынуть одиночные qoutes на

$this->session->set_userdata('$sess_data');

он обрабатывает переменную $sess_data как обычную строку.

должны быть:

$this->session->set_userdata($sess_data);

+0

Спасибо, я обновил свой код, теперь его успешно зарегистрировался и откройте dashboard.php, но все же, когда я revisit login.php, он открывает форму входа и не перенаправляет меня на панель управления. –

Смежные вопросы