Как обновить базу данных автоматически после окончания сеанса без обновления на моей странице

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

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

$idletime = 3600; //after 1hr the user gets logged out if (time() - $_SESSION['timestamp'] >= $idletime){ $online = "UPDATE users SET active = 0 WHERE username = '".$_SESSION['username']."'"; mysqli_query($con, $online); session_destroy(); header("Location:index.php"); } else { $_SESSION['timestamp'] = time(); } 

Я бы предложил использовать другой подход. Вы не должны обновлять поле «active» в базе данных. В противном случае вы создаете поле «lastActivity» в БД и обновляете его каждый раз, когда пользователь делает что-то на сайте.

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

 SELECT * FROM users WHERE lastActivity < TIMESTAMP(CURRENT_TIMESTAMP() - INTERVAL 1 HOUR); 

Ваш PHP-код будет выглядеть так:

 $online = "UPDATE users SET lastActive = NOW() WHERE username = '".$_SESSION['username']."'"; mysqli_query($con, $online); 

Лучший вариант – не использовать активный / неактивный флаг в базе данных, а скорее использовать что-то вроде last_active timestamp. Когда пользователь обращается к странице, обновите метку времени до CURRENT_TIMESTAMP() . И чтобы определить, активен ли пользователь в настоящий момент, запрос WHERE active_timestamp < TIMESTAMPADD(MINUTE, -60, CURRENT_TIMESTAMP())

Убедитесь, что вы устанавливаете active_timestamp как тип DATETIME в структуре таблицы. (Пользователи ALTER TABLE users ADD COLUMN active_timestamp datetime AFTER username' )

Проблема здесь в том, что ваш скрипт хочет выгнать пользователя, когда сеанс простаивает. Для этого вы должны посмотреть JavaScript, установить таймер, который отсчитывает более 1 часа, а если нет активности, перенаправляйте страницу.