繁体   English   中英

如何计算会话以显示站点上已登录用户的总数

[英]How to count SESSIONS to display total number of logged in users on the site

我希望在我的网站上显示登录的在线用户,例如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>";
    }
}
?>

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

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

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

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

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

建议:将会话设置为数据库,超时时间为20分钟。 当有人关闭浏览器时,您最多只能看到20分钟。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM