簡體   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