2013-01-09 117 views
16

您好我有一個網站在CodeIgniter中開發。Codeigniter未設置會話

在我的一個頁面中,我使用了CodeIgniter分頁後的搜索表單。

在這種情況下,我在我的會話中存儲了由$_POST傳遞的搜索值,因爲如果我有更多結果單擊下一頁,搜索將會保留搜索值。

但是,當我改變頁面例如我想返回到索引,並返回到我的搜索表單頁面後,會話已創建,並使用會話的值進行查詢。我在更換頁面時如何銷燬或取消會話的價值?這可能嗎?

在我的模型函數中,我檢查會話值是否不同於0並存在,如果爲true,我使用會話值進行查詢。

這是我的控制器(國家要存儲到會話中的值)

public function region_list(){ 
     $this->load->model('backend/Nation_model'); 
     $this->load->library("pagination"); 

     if($_POST) 
     { 
      if (isset($_POST['ricerca'])){ 

       $nation = $this->input->post('nation'); 
       if(strlen($nation) > 0){ 
        $this->session->set_userdata('nation',$nation); 
       } 

       $config = array(); 
       $config["base_url"] = base_url() . "index.php/backend/region/region_list"; 
       $config["total_rows"] = $this->Region_model->countRegionSearch(); 
       $config["per_page"] = 10; 
       $config["uri_segment"] = 4; 

       $this->pagination->initialize($config); 

       $page = ($this->uri->segment(4)) ? $this->uri->segment(4) : 0; 
       $data["regionlist"] = $this->Region_model->regionSearch($config["per_page"], $page); 
       $data["links"] = $this->pagination->create_links(); 
       $data["nationlist"] = $this->Nation_model->nationList(); 

       $this->load->view('backend/region_list_view',$data); 
      } 
     } 
     else 
     { 
      $config = array(); 
      $config["base_url"] = base_url() . "index.php/backend/region/region_list"; 
      $config["total_rows"] = $this->Region_model->countRegion(); 
      $config["per_page"] = 10; 
      $config["uri_segment"] = 4; 

      $this->pagination->initialize($config); 

      $page = ($this->uri->segment(4)) ? $this->uri->segment(4) : 0; 
      $data["links"] = $this->pagination->create_links(); 
      $data["regionlist"] = $this->Region_model->regionList($config["per_page"], $page); 
      $data["nationlist"] = $this->Nation_model->nationList(); 

      $this->load->view('backend/region_list_view',$data); 
     } 
    } 

,這是我的模型來搜索:

function regionList($limit=null, $start=null) { 
     $nation_id = $this->session->userdata('nation'); 
     if ($this->session->userdata('language')=="it") 
      $this->db->select('region.id, region.name_it as name,nation.id as nation_id, nation.name_it as nation_name'); 
     if ($this->session->userdata('language')=="en") 
      $this->db->select('region.id, region.name_en as name,nation.id as nation_id, nation.name_en as nation_name'); 
     $this->db->from('region'); 
     $this->db->join('nation', 'region.nation_id = nation.id','left'); 
     if((isset($nation_id))&&($nation_id!=0)) 
      $this->db->where('region.nation_id', $nation_id); 
     $this->db->order_by("name", "asc"); 
     $this->db->limit($limit, $start); 
     $query = $this->db->get(); 
     $region = array(); 
     foreach ($query->result() as $row) 
      array_push($region, $row); 

     return $region;  
    } 

    function countRegion() { 
     $nation_id = $this->session->userdata('nation'); 
     if ($this->session->userdata('language')=="it") 
      $this->db->select('region.id, region.name_it as name,nation.id as nation_id, nation.name_it as nation_name'); 
     if ($this->session->userdata('language')=="en") 
      $this->db->select('region.id, region.name_en as name,nation.id as nation_id, nation.name_en as nation_name'); 
     $this->db->from('region'); 
     $this->db->join('nation', 'region.nation_id = nation.id','left'); 
     if((isset($nation_id))&&($nation_id!=0)) 
      $this->db->where('region.nation_id', $nation_id); 
     $this->db->order_by("name", "asc"); 
     $query = $this->db->get(); 
     return $query->num_rows(); 
    } 

    public function regionSearch($limit=null, $start=null){ 
     $nation_id = $this->session->userdata('nation'); 
     if ($this->session->userdata('language')=="it"){ 
      $this->db->select('*,region.id, region.name_it as name,nation.id as nation_id, nation.name_it as nation_name'); 
      if($this->input->post('name')!="") 
       $this->db->where('region.name_it LIKE "%'.$this->input->post('name').'%"'); 
     } 

     if ($this->session->userdata('language')=="en"){ 
      $this->db->select('*,region.id, region.name_en as name,nation.id as nation_id, nation.name_en as nation_name'); 
      if($this->input->post('name')!="") 
       $this->db->where('region.name_en LIKE "%'.$this->input->post('name').'%"'); 
     } 
     $this->db->from('region'); 
     $this->db->join('nation', 'region.nation_id = nation.id','left'); 
     if((isset($nation_id))&&($nation_id!=0)) 
      $this->db->where('region.nation_id', $nation_id); 
     $this->db->order_by("name", "asc"); 
     $this->db->limit($limit, $start); 
     $query = $this->db->get(); 
     $region = array(); 
     foreach ($query->result() as $row) 
      array_push($region, $row); 

     return $region; 
    } 

    public function countRegionSearch(){ 
     $nation_id = $this->session->userdata('nation'); 
     if ($this->session->userdata('language')=="it"){ 
      $this->db->select('*,region.id, region.name_it as name,nation.id as nation_id, nation.name_it as nation_name'); 
      if($this->input->post('name')!="") 
       $this->db->where('region.name_it LIKE "%'.$this->input->post('name').'%"'); 
     } 

     if ($this->session->userdata('language')=="en"){ 
      $this->db->select('*,region.id, region.name_en as name,nation.id as nation_id, nation.name_en as nation_name'); 
      if($this->input->post('name')!="") 
       $this->db->where('region.name_en LIKE "%'.$this->input->post('name').'%"'); 
     } 
     $this->db->from('region'); 
     $this->db->join('nation', 'region.nation_id = nation.id','left'); 
     if((isset($nation_id))&&($nation_id!=0)) 
      $this->db->where('region.nation_id', $nation_id); 
     $this->db->order_by("name", "asc"); 

     $query = $this->db->get(); 
     return $query->num_rows();  
    } 
+0

難道你也許使用的URL的GET增值經銷​​商,而不是持續的搜索詞在會議? –

+0

如果我有10個或更多的輸入?一個壞的很糟糕的網址 –

+0

不夠公平。之前沒有使用過codeigniter,它是否使用前端控制器?如果是這樣,也許檢查網址,如果它不是搜索頁面未設置會話變種。我害怕在黑暗中刺一下。 –

回答

38

回答你的問題:

我如何摧毀或會話的未設置值?

我可以通過這個幫助你:

$this->session->unset_userdata('some_name'); 

,以及可在多個數據:

$array_items = array('username' => '', 'email' => ''); 

$this->session->unset_userdata($array_items); 

,並銷燬了會議:

$this->session->sess_destroy(); 

現在的在頁面更改部分(在我的頂部IND)

可以設置配置 「anchor_class」 的分頁程序等於類名你想要的

後,僅僅在jQuery的檢查它的onclick該類將發送一個頭到控制器的功能,將取消設置用戶會話。

+0

在數組中,'username'是一個列名? –

+0

@DanishEnam是的! –

+0

謝謝@mamdouh –

6

而不是使用set_userdata你應該使用set_flashdata。

根據CI的用戶指南:

笨支持「flashdata」,或者說將只可用於下一個服務器請求,然後被自動清除會話數據。這些可能非常有用,通常用於信息或狀態消息(例如:「記錄2已刪除」)。

http://ellislab.com/codeigniter/user-guide/libraries/sessions.html

-1
$session_data = array('username' =>"shashikant"); 
$this->session->set_userdata('logged_in', $session_data); 

$this->session->unset_userdata('logged_in'); 
-1

這裏有兩種方法可以破壞會話:

  1. $this->session->sess_destroy();
  2. $this->session->unset_userdata('session_name');
+0

這並沒有說從2013年的接受答案中沒有包含任何內容。 – BSMP

-1
$this->session->unset_userdata('session_value');