Завершение сеанса Codeigniter

Привет, у меня есть сайт в CodeIgniter.

На одной из моих страниц я использую разбиение на страницы CodeIgniter после формы поиска.

В этом случае я сохраняю в своем сеансе значение поиска, переданное $_POST потому что, если у меня есть больше результата, нажатие на следующую страницу, поиск keppe на значение поиска.

Но когда я меняю страницу, например, я хочу вернуться к индексу, и после возврата на мою страницу формы поиска сеанс уже создан и делает запрос со значением сеанса. Как я могу уничтожить или отключить значение сеанса при смене страницы? Это возможно?

В мою модельную функцию я проверяю, отличается ли значение сеанса от 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(); } 

Related of "Завершение сеанса Codeigniter"

отвечая на ваш вопрос:

Как я могу уничтожить или отключить значение сеанса?

Я могу помочь вам в этом:

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

и для нескольких данных вы можете:

 $array_items = array('username' => '', 'email' => ''); $this->session->unset_userdata($array_items); 

и уничтожить сеанс:

 $this->session->sess_destroy(); 

Теперь для части смены страницы (на мой взгляд) :

вы можете установить конфигурацию «anchor_class» в paginator, равную требуемому имени класса .

после этого просто проверьте его с помощью jquery onclick для этого класса, который отправит голову до функции контроллера, которая отключит сеанс пользователя.

Вместо использования set_userdata вы должны использовать set_flashdata.

Согласно руководству пользователя CI:

CodeIgniter поддерживает «flashdata» или данные сеанса, которые будут доступны только для следующего запроса сервера, и затем автоматически очищаются. Они могут быть очень полезными и обычно используются для информационных или статусных сообщений (например: «запись 2 удалена»).

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

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

Вот два способа уничтожить сеанс:

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