![](/img/trans.png)
[英]How do I find out total number of sessions created i.e. number of logged in users?
[英]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.