Автоматически завершать сеанс и определять, истек ли сеанс в Codeigniter

Я видел много вопросов по моей теме, но, похоже, до сих порне нашел мой ответ. Что я'На самом деле я ищу, когда истекает время сеанса, пользователь будет автоматически перенаправлен на страницу со словами.Your session has already expired. Please register to continue browsing.

На самом деле я понятия не имею, как я могу определить, если пользовательсессия уже истекла. Вот'Это то, что я имею до сих пор.

Благодарю.

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)

Когда вы начинаете сеанс, сохраняйте текущее время в переменной сеанса. Вы можете использоватьsession_expire_checker функция, которая будет проверять текущее время и сохраненное время, чтобы определить, истек ли сеанс. Вы должны вызывать функцию из конструктора, чтобы каждый вызов функции использовал эту функцию автоматически. В этой функции, если сеанс истек, вы перенаправляете на другой контроллер.

Вы должны использовать отдельный контроллер для перенаправленного URL, иначе было бы бесконечное перенаправление.

Вы можете проверить пользователясессия, сделавajax позвони и заверни вsetInterval jquery's функционировать как

setInterval(function() {
  // Do something every 1 minute 
$.ajax({
type : 'POST',
url  : ''
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();
 }

Надеюсь, это имеет смысл

 Gagantous22 окт. 2017 г., 02:48
Как я могу сделать предупреждение на экране входа в систему, как "Ваш сеанс входа в систему истек из-за неактивности "?
 Markmeplease23 окт. 2017 г., 07:56
@Gagantous Это мой footer.php - Просмотрfunction checkLogin() { $.ajax({ type : 'POST', url : js_base_url('checkLogin'), success : function(data){ if(data = 0){ if(!alert("Your session has timeout. You will be logout automatically. Login again to continue. Thank you!")){ var l = ""; window.location.href=l; }}}}); } Это мой CheckLogin.php - Контроллерfunction index(){ $usr = $this->session->userdata('s_data'); if($usr){ echo $data = '1'; }else{ echo $data = '0'; }}} Я надеюсь, что это поможет вам.
 Markmeplease23 окт. 2017 г., 07:43
@Gagantous В ответе вышеsetInterval(...) проверимfunction check_session() за каждую 1 минуту. Вы можете разместитьsetInterval(...) в вашем нижнем колонтитуле,function check_session может быть размещен в другом представлении, затем вы можете загрузить это представление в контроллер, который вы хотите, какurl : ''
 Gagantous22 окт. 2017 г., 02:33
@Markmepleasecontent="900;url=сделал900 число в миллисекундах или секундах?
 Smith27 янв. 2014 г., 17:44
это техника бога, но что, если у пользователя отключен JavaScript? Мне нужно решение, которое работает без JavaScript
 Gagantous22 окт. 2017 г., 03:39
@Markmeplease, почему они используютelse вelse{ echo 0; redirect('your register controller');//redirect from here or you can redirect in the ajax response }   если результат0 куда бы он перенаправил? Я имею в виду, я все еще на странице справа, так что жеelse стоять за?
 Gagantous22 окт. 2017 г., 02:48
Я имею в виду, я добавляю текст над формой входа @MKhalidJunaid
 Markmeplease06 нояб. 2016 г., 02:28
Я знаю, что эта тема уже старая, но, в интересах других, таких как я, я использую ответ выше с небольшой модификацией. Если вы нене хочу использоватьjs Вы можете использовать метаданные, как это,, который я видел на другом сайте. Поместите это в тег.content="900; время в секундах, за которым следуетurl= который содержит метод выхода из системы, в моем случае, отдельный контроллер. Надеюсь, что это поможет другим в будущем, но.ajax выше тот для меня. Спасибо
 Markmeplease22 окт. 2017 г., 03:19
@ Гагант этос в секундах, 900 15 минут. Что касается вашего вопроса об уведомлении об истечении срока действия логина, вы можете добавить в URL, какlocalhost/logout=1 где 1 - это уведомление о том, что сеанс истек из-за неактивности. Конечно, у вас должен быть PHP-код для проверки этого. Надеюсь что поможет :)
 Markmeplease23 окт. 2017 г., 07:08
@Gagantous, если тест ELSE утверждение, если$id имеет данные или true, иначе$id 0 или ложь, если$id = 0 or false это означает, чтоsession срок действия истек, поэтому никаких данных по нему уже нет. ИтакELSE перенаправит вас на страницу входа, так как сессия уже истекла. Вы можете добавить условие на странице входа, которое будет отображать уведомление, как,localhost/login?expired=1, вы можете$_GET['expired'] = 1, дисплейSession Expired, Login again. или вы можете сделать jquery для отображения уведомления, а затем перенаправить на страницу входа в систему после нажатия кнопки ОК.

Codeigniter не "запустить событие " когда сессия истекает. Так что либо вы пишете некоторый код в каждую функцию контроллера, чтобы проверить, вошел ли пользователь в систему. Или вы используете несколько маленьких j в нижнем колонтитуле (что я лично предпочитаю):


    var mins = 15 * 60;
    var active = setTimeout("logout()",(mins*1000));
    function logout()
    {
        location='/account/timeout'; // 

Хотя это и не на 100% надежно, вы можете установить cookie на компьютере пользователя. Я бы порекомендовал установить срок действия примерно за час.

С каждой страницей, которую вы хотели узнать, истек ли сеанс, вы можете проверить, существуют ли и файл cookie, и сеанс. Если это так ... продолжайте. Если остаются только файлы cookie, вы знаете, что сеанс истек, и вам нужно перенаправить их на страницу, на которую вы ссылались в своем вопросе. Если ни того, ни другого нет, значит, есть проблема, и пользователь должен перезапустить все.

Конечно, для каждой страницы, для которой создается сеанс, истечение срока сеанса будет перезапускаться, поэтому вам нужно будет сбросить cookie. Это может быть немного утомительно, но это то, что я бы порекомендовал.

 AyJane Bouvier30 мая 2013 г., 05:15
Есть ли у меня все-таки сделать это в контроллере?
Решение Вопроса

Вы можете хранить данные в объекте сеанса, и пользователь перенаправляет любую страницу, вы можете проверить, что объект сеанса уже существует, если не существует, вы можете показать предупреждение, сеанс истек

Ваш ответ на вопрос