wake-up-neo.net

Sitzung zur Codeigniter-Sitzung zurückgesetzt

Hallo, ich habe eine Website in CodeIgniter entwickelt.

In einer meiner Seiten verwende ich die Paginierung von CodeIgniter nach einem Suchformular.

In diesem Fall speichere ich den von $_POST übergebenen Suchwert in meine Sitzung, denn wenn ich mehr Ergebnis auf die nächste Seite habe, wird der Suchwert angezeigt.

Wenn ich zum Beispiel die Seite wechsle, möchte ich zum Index zurückkehren, und nachdem ich zu meiner Suchformularseite zurückgekehrt bin, ist die Sitzung bereits erstellt und die Abfrage mit dem Wert der Sitzung ausgeführt. Wie kann ich den Wert der Sitzung zerstören oder aufheben, wenn ich die Seite wechsle? Ist das möglich?

In meiner Modellfunktion überprüfe ich, ob der Sitzungswert von 0 abweicht und ob er existiert. Wenn ja, stelle ich eine Abfrage mit dem Sitzungswert ab.

Dies ist mein Controller (Nation ist der Wert, der in der Sitzung gespeichert werden soll)

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

und dies ist mein zu suchendes Modell:

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

beantwortung Ihrer Frage:

Wie kann ich den Wert der Sitzung zerstören oder aufheben?

Ich kann dir dabei helfen:

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

und für mehrere Daten können Sie:

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

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

und die Sitzung zu zerstören:

$this->session->sess_destroy();

Nun zum Seitenwechsel-Teil (ganz oben in meinem Kopf) :

sie können das config "anchor_class" des paginator gleich dem gewünschten classname setzen.

danach überprüfen Sie es einfach mit jquery onclick für diese Klasse , die einen Kopf an die Controller-Funktion schickt, die die Benutzersitzung deaktiviert. 

50

Statt set_userdata sollten Sie set_flashdata verwenden.

Laut CI-Benutzerhandbuch:

CodeIgniter unterstützt "flashdata" oder Sitzungsdaten, die nur für die nächste Serveranfrage verfügbar sind und dann automatisch gelöscht werden. Diese können sehr nützlich sein und werden normalerweise für Informationsnachrichten oder Statusmeldungen verwendet (z. B. "Datensatz 2 gelöscht").

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

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

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

Ich benutze die alte PHP way..It löscht alle Sitzungsvariablen und muss nicht jede in einem Array angeben. Und nachdem wir die Variablen gelöscht haben, zerstören wir die Sitzung.

session_unset();
session_destroy();
1
Ashish Gaikwad
$this->session->unset_userdata('session_value');
0
Gill