![](/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.