2013-01-09 12 views
16

Witam Mam stronę rozwijać w CodeIgniter.Codeigniter unset session

Na jednej z moich stron używam stronicowania CodeIgniter po formularzu wyszukiwania.

W tym przypadku przechowywać w moim sesji wartość wyszukiwania przekazywane przez $_POST bo jeśli mam więcej wynik klikając następnej stronie keppe wyszukiwania wartość poszukiwania.

Ale gdy zmieniam stronę, na przykład chcę wrócić do indeksu i po powrocie do strony formularza wyszukiwania sesja jest już utworzona i wykonać zapytanie z wartością sesji. Jak mogę zniszczyć lub anulować wartość sesji po zmianie strony? czy to możliwe?

Do funkcji mojego modelu sprawdzam, czy wartość sesji jest różna od 0 i istnieje, jeśli prawda, tworzę zapytanie z wartością sesji.

To jest mój kontroler (naród jest wartością przechowywać do sesji)

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); 
     } 
    } 

a to mój wzór do wyszukiwania:

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

Mógłbyś może używać GET vars w adresach URL zamiast utrzymującej wyszukiwany termin w sesji? –

+0

Jeśli mam 10 lub więcej danych wejściowych? Zły, bardzo zły adres URL: –

+0

Odpowiednio. Nie korzystałeś wcześniej z codeignitera, czy używa on kontrolera frontowego? Jeśli tak, może sprawdź adres URL i jeśli to nie jest strona wyszukiwania, usuń ustawienie var sesji. Trochę ukłucia w ciemność, obawiam się. –

Odpowiedz

38

odpowiadając na pytanie:

Jak można zniszczyć lub rozbrojony wartość sesji?

mogę pomóc, to:

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

i stwardnienia danych można:

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

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

i zniszczenia sesji:

$this->session->sess_destroy(); 

Teraz do na stronie zmień część (na górze mojego m ind):

można ustawić config "anchor_class" z paginator równej classname chcesz.

że po prostu sprawdzić go z jquery onclick dla tej klasy który wyśle ​​głowę do funkcji regulatora, który będzie rozbrojony sesję użytkownika.

+0

W tablicy "username" jest nazwą kolumny? –

+0

@DanishEnam tak jest! –

+0

Dziękuję @mamdouh –

6

Zamiast użycie set_userdata należy użyć set_flashdata.

Według instrukcji CI:

CodeIgniter obsługuje „flashdata” lub dane sesji, które będą dostępne tylko dla następnego żądania serwera, a następnie są automatycznie usuwane. Mogą być bardzo użyteczne i są zwykle używane do komunikatów informacyjnych lub komunikatów o stanie (na przykład: "rekord 2 usunięty").

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

Oto dwa sposoby można zniszczyć sesji:

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

To nie mówi nic nie zawartego w zaakceptowanej odpowiedzi z 2013 roku. – BSMP

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