Pertanyaan Berakhir sesi secara otomatis dan mendeteksi jika sesi telah berakhir di Codeigniter


Saya telah melihat banyak pertanyaan di sini tentang topik saya tetapi sepertinya saya masih belum menemukan jawaban saya. Yang sebenarnya saya cari adalah ketika sesi berakhir, pengguna akan secara otomatis dialihkan ke halaman yang mengatakan Your session has already expired. Please register to continue browsing..

Sebenarnya saya tidak tahu bagaimana saya bisa menentukan apakah sesi pengguna sudah kadaluwarsa. Inilah yang saya miliki sejauh ini.

Terima kasih.

function trial() {

    $this->db->select()->from('user')->where('user_type', 'tester');
    $tester = $this->db->get();

    foreach ($tester->result() as $row) {

        $data = array(
            'id' => $row->id,
            'first_name' => $row->first_name,
            'last_name' => $row->last_name,
            'display_name' => $row->display_name,
            'email' => $row->email,
            'avatar' => $row->avatar,
            'user_type' => $row->user_type,
            'logged_in' => TRUE
        );
        $this->session->set_userdata($data);
    }

    redirect(base_url(), 'refresh');
} 

5
2018-05-30 02:27


asal


Jawaban:


Anda dapat menyimpan data dalam objek sesi dan mengarahkan pengguna setiap halaman, Anda dapat memeriksa objek sesi sudah ada jika tidak ada Anda dapat menunjukkan peringatan, sesi berakhir


1
2018-05-30 06:53



Anda dapat memeriksa sesi pengguna dengan membuat ajax memanggil dan membungkusnya ke dalam setInterval  jquery's berfungsi seperti

setInterval(function() {
  // Do something every 1 minute 
$.ajax({
type : 'POST',
url  : '<?php echo site_url("CONTROLLERNAME/check_session")?>'
success : function(data){
if(data){
   //your session is not expired
}else{
   //your session is already expired
 window.location.href="your url"; // or you can redirect from here also
} 
});
}, 60000);


 //This function checks your session 
 function check_session(){
    $id = $this->session->userdata('id');
   if($id ){
         echo 1;
   }else{
         echo 0;
   redirect('your register controller');//redirect from here or you can redirect in the ajax response
   }

  die();
 }

Semoga itu masuk akal


6
2018-05-30 06:22



Meskipun tidak 100% andal, Anda dapat mengatur cookie pada mesin pengguna. Saya akan merekomendasikan pengaturan kedaluwarsa sekitar satu jam sebelumnya.

Dengan setiap halaman yang ingin Anda ketahui jika sesi telah berakhir, Anda dapat memeriksa untuk melihat apakah cookie dan sesi ada. Jika ya ... lanjutkan. Jika hanya cookie yang tersisa, maka Anda tahu bahwa sesi telah kedaluwarsa dan Anda perlu mengalihkan mereka ke halaman yang Anda rujuk di pertanyaan Anda. Jika tidak ada, maka ada masalah dan pengguna perlu memulai ulang semuanya.

Tentu saja, untuk setiap halaman yang sesi yang dipakai, kadaluwarsa sesi akan dimulai kembali, jadi Anda harus mengatur ulang cookie. Ini bisa menjadi agak membosankan, tetapi itu adalah apa yang saya sarankan.


1
2018-05-30 02:35



Saat Anda memulai sesi, simpan waktu saat ini dalam variabel sesi. Anda bisa menggunakan session_expire_checker fungsi yang akan memeriksa waktu saat ini dan waktu yang disimpan untuk menentukan apakah sesi telah kedaluwarsa. Anda harus memanggil fungsi dari konstruktor sehingga setiap panggilan fungsi akan menggunakan fungsi ini secara otomatis. Dalam fungsi itu jika sesi kedaluwarsa, Anda mengalihkan ke pengontrol lain.

Anda harus menggunakan pengontrol terpisah untuk URL yang dialihkan, jika tidak maka akan ada pengalihan tanpa batas.


0
2018-05-30 06:37



Codeigniter tidak "menyalakan acara" ketika sesi berakhir. Jadi baik Anda menulis beberapa kode di setiap fungsi pengontrol untuk memeriksa apakah pengguna masih login. Atau Anda menggunakan beberapa js kecil di footer (yang saya pribadi lebih suka):

<script>
    var mins = 15 * 60;
    var active = setTimeout("logout()",(mins*1000));
    function logout()
    {
        location='/account/timeout'; // <-- put your controller function here to destroy the session object and redirect the user to the login page.
    }
</script>

0
2017-08-29 08:19