我希望在我的网站上显示在线用户的显示内容,例如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>";
}
}
?>
答案 0 :(得分:1)
无法检测到关闭的浏览器。了解网站上有多少用户的最佳方法是使用会话完成所有操作。当您在文件系统上使用会话时,这非常困难,因为您必须打开所有文件并阅读它们。所以....
最好的方法是将会话保存在数据库中。在那里,您可以在登录时为会话设置用户ID,并在注销时将其删除。然后,您可以使用一个简单的mysql计数脚本来计算与用户的所有会话。
这里有一个很好的教程链接,如何在数据库上进行会话。
http://www.tonymarston.net/php-mysql/session-handler.html
你还有一个问题。当用户关闭浏览器时,您将看不到它。这是因为客户端不发送消息。我现在走了这就是为什么我们有一个会话超时。你可以将超时时间缩短到2分钟但是你有一个问题,当有人正在阅读一个页面超过2分钟时,他将被踢。您可以每分钟使用ajax脚本来补偿更新会话,但这会占用大量服务器流量/内存。这就是为什么不建议这样做。
建议:将会话设置为数据库,超时为20分钟。当有人关闭他的浏览器时,您将看不到最长20分钟。