Как отследить время выхода из сеанса в php и сохранить его в MySQL в качестве базы данных - PullRequest
0 голосов
/ 01 сентября 2018

Здравствуйте, веб-разработчик! Я хочу спросить о сеансе выхода из системы в PHP,

код, если пользователь входит в систему

<?php 

    // the login validation page 

    $the_username = $_POST['the_username'];
    $the_password = $_POST['the_password'];

    $login_date = date("Y-m-d");
    $login_time = date("H:i:s");

    $query = mysqli_query($conn,"SELECT * FROM tbl_user WHERE usr = '$the_username' AND pwd = '$the_password'");
    $result = mysqli_num_rows($query);


    if ($result > 1) {
        $fetch = mysqli_fetch_assoc($query);
        $_SESSION['the_username'] = $fetch['usr'];
        $_SESSION['the_password'] = $fetch['pwd'];
        mysqli_query($conn,"INSERT INTO track_log_user(`id`,`username`,`login_date`,`login_time`,`logout_date`,`logout_time`) VALUES (NULL,`$_SESSION[the_username]`,'$login_date','$login_time','','')");
        header("location:my_menu.php");
    }
    else {
        echo "Your Login Is Incorrect";
        header("location:index.php");
    }

  ?>

Код, если пользователь нажимает кнопку выхода из системы

<?php
require_once ('connections.php');
// this is logout page when user click button logout in system page

session_start();
$time = date("H:i:s");
$date = date("Y-m-d");
mysqli_query($conn, "UPDATE track_log_user SET logout_date = '$date' AND logout_time = '$time' WHERE username = '$_SESSION[the_username]'");
$_SESSION = NULL;
$_SESSION = [];
session_unset();
session_destroy();
header("location:index.php");
?>

И мой вопрос: как, если клиент бездействует или из-за ошибки браузера, или из-за сбоя ноутбука, или принудительно закрывает окно / вкладку, и их сеанс заканчивается автоматически и выходит из системы?

Как будет работать моя бэкэнд-система для отслеживания входа и выхода из системы?

Для облегчения моей задачи составление ежемесячного отчета о том, сколько клиентов / клиентов посещают и используют наш сайт.

Пожалуйста, дайте мне предложение для кода

Спасибо.

1 Ответ

0 голосов
/ 01 сентября 2018

Если вы хотите отслеживать сеанс пользователя, вам нужно сохранить данные в их примере браузера (cookie).

Синтаксис для PHP

setcookie(name, value, expire, path, domain, secure, httponly);

Требуется только имя параметра. Все остальные параметры являются необязательными.

вы можете использовать md5 или любую технику хеширования для маскировки ваших данных.

Но, если вы не хотите хранить данные в их браузере, вы можете создать временную базу данных для текущего сеанса пользователя. Всякий раз, когда пользователь создает какое-либо событие (например, нажав кнопку или запросить веб-страницу), вы можете искать базу данных, если он уже отсутствует.

После удаления данных вы можете удалить временные данные пользователя для экономии места.

Edit: Попробуйте использовать это вместо

$datetime = date("Y-m-d H:i:s"); 
$timestamp = strtotime($datetime); //in milliseconds
mysqli_query($conn,"UPDATE users SET logout_timestamp = '$timestamp ' WHERE username = '$_SESSION[the_username]'");

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

//set maximum session (global variable), example 30 minutes
$_MAXIMUM_SESSION_IN_SEC = 60*30;


$timestamp_difference = $new_timestamp - $old_timestamp
if($timestamp_difference/1000 > $_MAXIMUM_SESSION_IN_SEC)
{
    //logout here
}
else 
{
    //remaining time for display
    $seconds= floor((timestamp_difference % (1000 * 60)) / 1000);
    $minutes= floor((timestamp_difference % (1000 * 60 * 60)) / (1000 * 60));
    $hour = floor((timestamp_difference % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
    //echo here
}

Так как вы говорите о клиентской стороне. Добавьте JavaScript. Попробуйте это.

<script>
// fetch data from sql
var oldTimestamp = <?php echo $timestamp_from_sql; ?> ;

// Update the every 1 second
var x = setInterval(function() {

  // Get current timestamp
  var currentTimestamp = Date.now();

  // Find timestamp difference
  var timestamp_difference = currentTimestamp - oldTimestamp;

  // Time calculations for hours, minutes and seconds
  var hours = Math.floor((timestamp_difference % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
  var minutes = Math.floor((timestamp_difference % (1000 * 60 * 60)) / (1000 * 60));
  var seconds = Math.floor((timestamp_difference % (1000 * 60)) / 1000);

  // Display the result in the element with id="demo"
  document.getElementById("demo").innerHTML = hours + "h "
  + minutes + "m " + seconds + "s ";

  // If above the session limit, logout the user
  if (distance > maximumSessionInSec) {
    clearInterval(x);
    document.getElementById("demo").innerHTML = "SESSION EXPIRED";
    //add other code here to reload the page
    //or add ajax code to update files in the server
  }
}, 1000);
</script>
...