Автоматический выход при выходе из страницы (PHP) - PullRequest
0 голосов
/ 11 декабря 2018

Можно ли создать автоматический выход из системы, когда посетитель закрывает или покидает страницу?Я знаю, что код, который я использовал, не очень хороший, но мне нужно что-то без базы данных.Во всяком случае, я использую 2 файла, login.php и index.php.Я только начал писать PHP, поэтому «простое» объяснение было бы очень полезно;)

Код для входа, который я сейчас использую:

login.php

<?php defined('DS') OR die('No direct access allowed.');

$users = array(
    "admin" => "admin"
);

if(isset($_GET['logout'])) {
    $_SESSION['username'] = '';
    header('Location:  ' . $_SERVER['PHP_SELF']);
}

if(isset($_POST['username'])) {
    if($users[$_POST['username']] !== NULL && $users[$_POST['username']] == $_POST['password']) {
        $_SESSION['username'] = $_POST['username'];
        header('Location:  ' . $_SERVER['PHP_SELF']);
    }else {
        //invalid login
        echo "<p>Username and/or password is incorrect!</p>";
    }
}

echo '<form method="post" action="'.SELF.'">
  <h2>Login</h2>
  <p><label for="username">Username</label> <input type="text" id="username" name="username" value="" /></p>
  <p><label for="password">Password</label> <input type="password" id="password" name="password" value="" /></p>
  <p><input type="submit" name="submit" value="Login" class="button"/></p>
  </form>';
exit;
?>

index.php

<?php
session_start();

define('DS',  TRUE);
define('USERNAME', $_SESSION['username']);
define('SELF',  $_SERVER['PHP_SELF'] );

if (!USERNAME or isset($_GET['logout']))
    include('login.php');
?>

Ответы [ 3 ]

0 голосов
/ 11 декабря 2018

Вы можете сохранить последнее действие пользователя, а затем сказать, был ли пользователь неактивным в течение более 1-2-3-4-5 минут.Тогда пользователь не в сети.Но последнее действие должно быть сохранено в БД, если вы хотите создать что-то вроде списка онлайн-пользователей.

Пример:

<?php
$user_time = 'last-activity';
$current_time = time();
$logout_after = 5*60;

if(($user_time+$logout_after) < $current_time) {
    // set to offline
} else {
    //check if user is set to online, if not set the status to offline and update last-activity: time()
}
?>
0 голосов
/ 11 декабря 2018

Так что я не проверял это, но это может работать.Вам нужно будет использовать некоторые JS / jQuery.

Используйте функцию .unload (), чтобы определить, когда пользователь покидает страницу, а затем отправьте запрос в сценарий выхода из системы, где вы отключили сеанс

$(window).unload(function() {
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function(){
        if(this.readyState == 4 && this.status == 200){

        }
    };
    xmlhttp.open("POST", "logoutScript.php", true);
    xmlhttp.send();
});
0 голосов
/ 11 декабря 2018

нет "прямого" способа сделать это.

Первая попытка может заключаться в том, чтобы уменьшить время, сеанс жив в вашей php-конфигурации.

То, что вы хотите, можетбыть сделанным с помощью JavaScript, поэтому при выходе со страницы может произойти выход из системы, НО вы НЕ МОЖЕТЕ полагаться на него, если я убью свой браузер или браузер выйдет из строя, на ваш сервер не будет выполнен запрос на выход!

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

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