如何计算SESSIONS以显示网站上登录用户的总数

时间:2017-02-04 14:37:17

标签: php jquery html css session

我希望在我的网站上显示在线用户的显示内容,例如Members Online: 102。我没有抓住一个完美而简单的方法来解决这个问题。是否有会话计数方法或任何其他方法来实现此结果。我可以通过在登录和注销时使用数据库表中的0和1列来完成它,但是当用户直接关闭浏览器并退出会话时它将无济于事。这是真正的问题。请帮我怎么做。对于任何实例,我只是分享我的登录和注销脚本。

退出脚本

<?php  
    session_start();
    if(isset($_SESSION["zoranelogin"])){
        unset($_SESSION["zoranelogin"]);    
        header("Location: login.php");  
    }
?> 

登录脚本

<?php 
session_start();
if(isset($_SESSION['zoranelogin'])){
    header('Location: dashboard.php');
}
include'config/db.php'; 
$msg = null; 
$date = date('Y-m-d H:i:s');

$uname  = (!empty($_POST['uname']))?$_POST['uname']:null;
$pass   = (!empty($_POST['pass']))?$_POST['pass']:null;
$mpass  = (!empty($_POST['pass']))?md5($_POST['pass']):null;

if(isset($_POST['login'])){
    $chklogin = "SELECT * FROM members WHERE mem_uname = :uname AND mem_pass = :pass";
    $chklogiq = $pdo->prepare($chklogin);
    $chklogiq->bindValue(':uname', $uname);
    $chklogiq->bindValue(':pass', $mpass);
    $chklogiq->execute();
    $checklgn = $chklogiq->rowCount();
    $fetch = $chklogiq->fetch();

    if($checklgn > 0){
        session_start();
        $_SESSION['zoranelogin'] = $fetch['mem_id']; 
        header("Location: dashboard.php");      
    }else{
        $msg = "<div class='message-error'>Username and Password are incorrect. Please try again!</div>";
    }
}
?>

1 个答案:

答案 0 :(得分:1)

无法检测到关闭的浏览器。了解网站上有多少用户的最佳方法是使用会话完成所有操作。当您在文件系统上使用会话时,这非常困难,因为您必须打开所有文件并阅读它们。所以....

最好的方法是将会话保存在数据库中。在那里,您可以在登录时为会话设置用户ID,并在注销时将其删除。然后,您可以使用一个简单的mysql计数脚本来计算与用户的所有会话。

这里有一个很好的教程链接,如何在数据库上进行会话。

http://www.tonymarston.net/php-mysql/session-handler.html

你还有一个问题。当用户关闭浏览器时,您将看不到它。这是因为客户端不发送消息。我现在走了这就是为什么我们有一个会话超时。你可以将超时时间缩短到2分钟但是你有一个问题,当有人正在阅读一个页面超过2分钟时,他将被踢。您可以每分钟使用ajax脚本来补偿更新会话,但这会占用大量服务器流量/内存。这就是为什么不建议这样做。

建议:将会话设置为数据库,超时为20分钟。当有人关闭他的浏览器时,您将看不到最长20分钟。