как создать новый сеанс для замены старого сеанса CodeIgniter

#codeigniter #session

#codeigniter #сеанс

Вопрос:

Я устанавливаю сеанс при входе пользователя в пользовательскую модель

 function cek(){
$username=$this->input->post('username');
$password=md5($this->input->post('password'));
$query=$this->db->query("select akun.*,profile.kelas, profile.jurusan FROM profile right JOIN akun ON profile.id_akun = akun.id_akun WHERE akun.username = '$username' AND akun.password = '$password'");
   if ($query->num_rows() > 0) 
    foreach ($query->result() as $data) {
      $data=array('LOGIN'=>TRUE,'LEVEL'=>$data->level,'KELAS'=>$data->kelas,'JURUSAN'=>$data->jurusan,'ID_AKUN'=>$data->id_akun,'USERNAME'=>$data->username);
      $this->session->set_userdata($data);  
      echo json_encode(array("status" => TRUE));  

  } else {
   echo json_encode(array("status" => FALSE));
  }     
  

}
Я хочу заменить только сеансы KELAS и JURUSAN

Контроллер профиля

 public function tambahprofile()
        {
            if($this->session->userdata('LOGIN')=='TRUE' and $this->session->userdata('LEVEL')==1 )
            {
                $id_akun=$this->session->userdata('ID_AKUN');
                $kelas='12';
               $jurusan='multimedia';
                $this->validasi();
                $data = array(
                    'nis' =>$this->input->post('nis'), 
                    'id_akun' =>$id_akun, 
                    'nama' =>$this->input->post('nama'),
                    'telpon' =>$this->input->post('telpon'),
                    'alamat' =>$this->input->post('alamat'),
                    'tgllahir' =>$this->input->post('tgllahir'),
                    'tmptlahir' =>$this->input->post('tmptlahir'),
                    'jurusan' =>$this->input->post('jurusan'),
                    'kelas' =>$this->input->post('kelas'),
                    'jk' =>$this->input->post('jk'),

                    );
                if ($this->input->post('id')=='') {
                    $this->profile_model->tambah($data);
                    /**

                        TODO:
                        - First todo item
                        - Second todo item

                     */


                 echo json_encode(array("status" => TRUE));
                }else{
                     $this->profile_model->update(array('id' => $this->input->post('id')),$data);
                       $this->profile_model->update($data);

                 echo json_encode(array("status" => TRUE));
                }
              }else {
            redirect('beranda/loginPage');     
            }

            }
  

Вид

 <?php echo $this->session->userdata('KELAS').$this->session->userdata('JURUSAN');?>
  

Я создаю новую сессию, чтобы заменить старую сессию KELAS и jurusan
без ошибок, но, на мой взгляд, это старая сессия

Комментарии:

1. Где вы разместили этот код в контроллере?

2. профиль контроллера в функции addingprofile

Ответ №1:

Попробуйте это.

 $data = array(
                'kelas' => "test1",
                'jurusan' => "Test2"
            );
$this->session->set_userdata($data);

var_dump($this->session->userdata() );

$this->session->unset_userdata('kelas');
$data = array( 'kelas' => "newTest" );
$this->session->set_userdata($data);

var_dump($this->session->userdata() );
  

Использование $this->session->unset_userdata( 'kelas' ); отменит только эту запись.
$data = array( 'kelas' => "newTest" ); $this->session->set_userdata($data); заменит только эту запись.

С другой стороны, $password=md5( $this->input->post( 'password' ) ); это не рекомендуется mate. Если вы читаете о том, что скорость, с которой md5() может быть нарушена, делает его плохим вариантом для хранения паролей.

PHP имеет встроенную функцию хеширования password_hash()

http://php.net/manual/en/function.password-hash.php

Стоило бы прочитать.

Ответ №2:

когда вам нужно заменить старые данные, просто сбросьте предыдущие данные, а затем снова установите новые данные

 //remove old data
$perticular_data = array('KELAS'=>$kelas,'JURUSAN'=>$jurusan);
$this->session->unset_userdata($perticular_data);

//set new data
$perticular_data = array('KELAS'=>$new_kelas,'JURUSAN'=>$new_jurusan);
$this->session->set_userdata($perticular_data);
  

Комментарии:

1. $this->session-> unset_userdata($data); удалить весь сеанс? это мой полный сеанс $data=array(‘LOGIN’=>TRUE,’LEVEL’=>$data->level,’KELAS’=>$data->kelas,’JURUSAN’=>$data->jurusan,’ID_AKUN’=>$data->id_akun,’USERNAME’=> $data-> username); я просто хочу заменить jurusan и kelas