Как я могу выйти из неактивных пользователей через 30 минут?

Я пытаюсь выйти из неактивных пользователей. Если они не переместили мышь или набрали через 30 минут, они автоматически выходят из системы и возвращаются на экран входа в систему. Детали входа в систему хранятся в моей базе данных.

Процедура входа в систему

<?php require_once('includes/session.php'); if (isset($_GET['logout']) and $_GET['logout'] == 1){ logout(); } //doublecheck status if (isset($_SESSION['user_id'])){ $login = 1; $login_message = "Logged In"; }else{ $login = 0; $login_message = "Logged Out"; } include_once("../includes/masterinclude.php"); //include_once("../includes/functions_admin.php"); $preferences = getPreferences(); $ip=$_SERVER['REMOTE_ADDR']; $message_login = ""; if (isset($_POST['username']) and isset($_POST['password'])){ $username = $_POST['username']; $password = $_POST['password']; $hashed_password = sha1($password); $u = Confirm_User($username, $hashed_password); if ($u == 1){ $u = Get_User($username, $hashed_password); $_SESSION['user_id'] = $u->user_id; $_SESSION['username'] = $u->user_name; echo "<script type=\"text/javascript\">document.location.href=\"/home\";</script>"; }else{ $warning = "red"; $message_login = "Login failed - Please try again"; } } ?><head> <form id="login" name="login" class="form-horizontal" method="post" action="_cms/login.php" _cms/style="display: block;"> <div class="form-group" id="reauthorizeInner"> <?php if($message_login != ""){ echo "<p><span class=\"message-error\">" . $message_login . "</span></p>"; }else{ echo "<p class=\"message\">Please enter your username &amp; password</p>"; } ?> <div class="input-group col-xs-12"> <input id="reauthuser" class="form-control" type="text" placeholder="Username.." name="username" value="username" onFocus="this.value=''" required="yes" message="You must enter a username"> <span class="input-group-addon"> <i class="icon-envelope-alt icon-fixed-width"></i> </span> </div> </div> <div class="form-group" id="reauthorizeInner"> <div class="input-group col-xs-12"> <input id="reauthPassword" class="form-control" name="password" type="password" value="password" onFocus="this.value=''" required="yes" message="You must enter a password"> <span class="input-group-addon"> <i class="icon-asterisk icon-fixed-width"></i> </span> </div> </div> <div class="clearfix"> <div class="btn-group btn-group-sm pull-right"> <button class="btn btn-primary" id="submit" type="submit" onclick="document['login'].submit();"> <i class="icon-arrow-right"></i> Login </button> </div> <div class="make-switch pull-left" data-on="primary" data-off="danger"></div> </div> </form> 

session.php

  <?php session_start(); if (isset($_SESSION['user_id'])){ $login = 1; }else{ $login = 0; } function confirm_logged_in() { if (!isset($_SESSION['user_id'])) { //redirect header("Location: /_cms/login.php?login=0"); } } function logout(){ $_SESSION = array(); if(isset($_COOKIE[session_name()])){ setcookie(session_name(), '', time()-42000, '/'); } session_destroy(); } ?> 

Я знаю, что здесь есть много кода, но я должен включить это, иначе люди не будут видеть сложность создания таймера выхода для этого. Я пробовал несколько разных методов, и никто из них не работает из-за неправильной процедуры входа в систему. Любая помощь будет принята с благодарностью!

Я бы использовал некоторую библиотеку JS / jQuery и iddletimout и объединил ее с вашим PHP-кодом:

 $.idleTimeout('#idletimeout', '#idletimeout a', { idleAfter: 300, //seconds onTimeout: function() { //some code window.location = "logout.php"; //This is your PHP logout page }, onIdle: function() { //some code }, onCountdown: function(counter) { //some code }, onResume: function() { //some code } }); 

Вам нужен код JavaScript, который будет подсчитывать время и сбросить счетчик, если произойдет какое-то событие. Но если счетчик достигнет 30 минут, вам нужно будет позвонить AJAX, который выйдет из системы этого пользователя – вызовите эту функцию выхода из системы.

Конечно, вы могли бы просто использовать встроенный тайм-аут в PHP, который по умолчанию убивает сессию через 30 минут без какой-либо активности.

Если вы хотите, чтобы он оставался в живых, когда пользователь перемещает мышь (в отличие от активного создания HTTP-запросов), тогда у вас может быть какой-то код в вашем Javascript, который отправляет событие ajax «ping», вызванное так часто перемещением мыши. Ajax ping не нужно ничего делать, пока он запускает фиктивный PHP-скрипт, который ссылается на сеанс, достаточно будет держать сессию открытой. Если скрипт ping не вызывается в течение 30 минут, сеанс будет тайм-аут.

Таким образом, нет реальной необходимости специально вызывать выход из системы; просто отпустите сессию.

(вам нужно, чтобы это произошло в любом случае, чтобы обрабатывать случаи, когда пользователь закрывает свой браузер, или он выходит из строя, или он теряет сетевое соединение и т. д., вы не хотите, чтобы сессия вешала навсегда в этих случаях)