2013-08-27 60 views
12

嗨,我已經在Codeigniter中創建了一個會話,我在模型中設置了會話變量。但是,當我通過Controller在視圖中調用會話變量時設置會話變量值後,會話變量值變爲空。任何幫助?Codeigniter中的會話變量不工作

更新

這是我的模型,其中設置我的會話變量

function login ($username, $password) 

    { 
     $this->db->where('username' , $username); 
     $this->db->where('password', $password); 

     $query = $this->db->get('users'); 

     if ($query->num_rows()>0) 

     { 
      foreach ($query->result() as $rows) 
      { 
       $data = array(

        'user_name' => $rows->username, 
        'logged_in' => TRUE, 
        'validated' => true 
       ); 
      } 

       $this->session->set_userdata($data); 
       //$user = $rows->username; 
       //$this->session->set_userdata('user_name', $user); 

       return true; 
     } 

     else 

     { 
      return false; 
     } 

    } 

這裏是我從那裏我重定向到視圖控制器

public function verification() 

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


     $result = $this->site_model->login($username, $password); 


     //$result = $this->session->set_userdata('validated'); 

     if ($result) 
     { 
      //$this->admin(); 
      //$this->session->set_userdata('login_state', TRUE); 

      redirect ('site/index'); 

     } 
     else 
     { 

      redirect ('site/login'); 
      //$this->load->view('login'); 
     } 
    } 

我已經叫session_start();控制器下construct();

,這是我如何訪問會話變量我認爲

<?php if ($this->session->userdata('user_name') != "") { ?> 

..... 
+0

你能否粘貼你的代碼? – Bora

+1

你的代碼在哪裏 –

+0

你有'session_start()'在所有相關文件的頂部,我拿? – 2013-08-27 07:01:20

回答

0

使用自動加載的應用程序/配置/ autoload.php,添加會話liblary和除去在session_start();

$autoload['libraries'] = array('session'); 

型號合格後數據vithout可變因素,你可以做這樣的:

控制器:

public function verification() 
{ 
    $result = $this->site_model->login(); 

     if ($result){ 
      redirect ('site/index'); 
     } else { 
      redirect ('site/login'); 
     } 
} 

型號:

public function login() 
{ 
    $this->db->where('username' , $this->input->post('username')); 
    $this->db->where('password', $this->input->post('password')); 

    $query = $this->db->get('users'); 

    if ($query->num_rows()>0) 

    { 
     $res = $query->row_array(); 

     $data = array(
      'user_name' => $res['username'], 
      'logged_in' => TRUE, 
      'validated' => true 
     ); 


     $this->session->set_userdata($data); 
     return true; 
    } else { 
     return false; 
    } 
} 
+0

我試過這個,但沒有工作... – Abbasi

0

設置會話變量控制器..這對我很好

模型

function Login($email,$pass){ 
     $this->db->where('username' ,$email); 
     $this->db->where('password',$pass); 
     $query=$this->db->get('users');  
    if ($query->num_rows == 1) {   
    return true;  
    }  
    return FALSE; 
    } 

控制器:

 function varification(){ 
      $this->load->model('login_model'); 
    $email=$this->input->post('email'); 
    $pass=$this->input->post('pass'); 
    $success=$this->login_model->Login($email,$pass); 
    if ($success) { 
       $data = array(
         'user_name' => $rows->username, 
         'logged_in' => TRUE, 
         'validated' => true 
       ); 
       $this->session->set_userdata($data); 
       redirect ('site/index'); 
    } else{ // incorrect id or password 
      redirect ('site/login'); 
      } 
    } 

現在,如果你回聲<?php echo $this->session->userdata('user_name');?>它會顯示會話的用戶名。你可以重複它的任何地方,甚至在view.hope這將幫助你

0

你並不需要使用PHP的核心session_start(); 請確保您有加載Session庫在autoload.php

爲:

$autoload['libraries'] = array("session"); 

,或者你可以手動加載會議庫:作爲

$this->load->library('session'); 

的完整文檔可以參考:Read Documentation

0

請使用此代碼笨

$this->session->set_userdata('user_session', $user_session_data); 

我有同樣的問題設置會話,它得到了解決使用本code.Hope你的作品呢!

0

在Model中設置會話變量對於任何CMV框架(如codeigniter)都不是一個好主意。編輯模型的login()功能,所以它返回一個組漂亮的相關信息......

function login ($username, $password) 
    { 
     $this->db->where('username' , $username); 
     $this->db->where('password', $password); 

     $query = $this->db->get('users'); 
     if ($query->num_rows()>0) 
     { 
      foreach ($query->result() as $rows) 
      { 
       $data = array(
        'user_name' => $rows->username, 
        'logged_in' => TRUE, 
        'validated' => true 
       ); 
      } 
      return $data; 
     } 
     else 
     { 
      return false; 
     } 
    } 

...從控制器處理會話。

public function verification() 
    { 
     $username = $this->input->post('username'); 
     $password = $this->input->post('password'); 

     $result = $this->site_model->login($username, $password); 

     if ($result == false) 
     { 
      redirect ('site/login'); 
      //$this->load->view('login'); 
     } 
     else 
     { 
      $this->session->set_userdata($result); 
      redirect ('site/index'); 
     } 
    } 

此外,爲了有提供給視圖文件會話的數據,您需要通過控制器

$data['user_name'] = $this->session->userdata('user_name'); 

通過他們,然後你可以做任何你的視圖文件:

<?php if ($user_name != "") { ?> 
0

您好,我認爲您需要更改您的型號代碼 您正在設置會話中的數組並在會話中訪問直接的user_name

我想下面的代碼會爲你工作,

function login ($username, $password) 
{ 

    $this->db->where('username' , $username); 

    $this->db->where('password', $password); 

    $query = $this->db->get('users')->row(); 

    if (count($query) > 0) 

    { 

      $this->session->set_userdata('user_name', $query->username); 
      $this->session->set_userdata('logged_in', true); 
      $this->session->set_userdata('validated', true); 

      return true; 
    } 

    else 

    { 
     return false; 
    } 

} 
0

請按照下面的說明。

請確保您已在autoload.php文件中添加了會話庫,以便會話將自動加載。

當您在codigniter中使用會話時,您沒有在文件的開頭添加session_start(),因爲codigniter核心系統會自動處理該操作。

在控制器而不是模型中設置會話變量是個好主意。

我希望這可以幫助你解決你的問題。

謝謝。

0

這裏是我的解決方案,希望可以幫助..:d

在模型

..我複製粘貼代碼波紋管,但我改變一點點..

function login ($username, $password) 

    { 
     $this->db->where('username' , $username); 
     $this->db->where('password', $password); 

     $query = $this->db->get('users'); 

     if ($query->result())//if any record 
     { 
      $rows = $query->row(); 

      $data = array(
        'user_name' => $rows->username, 
        'logged_in' => TRUE, 
        'validated' => true 
      ); 
      $this->session->set_userdata($data); 
      return true;  
     } 
     else 
     { 
      return false; 
     } 

    } 

刪除的session_start()在控制器,,然後在你的application/config/autoload.php

在這個$ autoload ['libraries'] = array(); =>添加這樣的會話 $ autoload ['libraries'] = array('session');

三江源..:d

1

首先在CI你不需要使用session_start()的任何地方。只在config/autoload.php文件中自動加載會話。

刪除session_start()。 嘗試使用flashdata。 Flashdata是臨時會話,主要用於您的類型的情況下,我們需要將用戶重定向到另一個頁面並顯示一些成功或錯誤消息。

  1. 集flashdata: $這個 - >會話級> set_flashdata( '項目', '值');

  2. get flashdata: $ this-> session-> flashdata('item');

這裏是文檔鏈接http://www.codeigniter.com/user_guide/libraries/sessions.html#flashdata

0

用戶默認的PHP會話,像session_start()$_SESSION,這是爲我工作。在php codeignatore