离开页面时自动注销(PHP)

时间:2018-12-11 11:54:53

标签: php session login logout

访问者关闭或离开页面时是否可以创建自动注销?我知道我使用的代码不是很好,但是我需要一些没有数据库的东西。无论如何,我使用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 :(得分:1)

没有“直接”方法。

第一次尝试可能是减少时间,在php配置中会话仍然存在。

您想要的东西可以用JavaScript制作,因此在离开页面时可能发生注销,但是您不能依靠它,如果我杀死我的浏览器或浏览器崩溃,则不会进行注销请求您的服务器!

问题的目的是什么?您唯一可以依靠的事实是,如果在给定的时间内不使用会话,会话将被自动破坏

答案 1 :(得分:0)

您可以保存用户的上次活动,然后说出该用户是否处于非活动状态超过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()
}
?>

答案 2 :(得分:0)

因此,我尚未对此进行测试,但它可能有效。不过,您将需要使用一些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();
});