1

了解しました。PHPスクリプトとMySQLを使用して、オンラインの訪問者の数を表示しています。私はすべてのページで関数を呼び出しており、同じセッション中に同じ人からの重複したエントリがないようにする方法が必要です。

正常に動作しますが、ページが読み込まれるたびに訪問者が増加します。セッション変数に「require_once」ステートメントがあると機能すると思いましたが、違います。以下はPHPコードです。助けてください!

//users online
function update_user_time()

{

    session_start();
    $session=session_id();
    $time=time();
    $time_check=$time-600; //SET TIME 10 minutes

    $host="localhost"; // Host name
    $username="______"; // Mysql username
    $password="______"; // Mysql password
    $db_name="______"; // Database name
    $tbl_name="______"; // Table name

    // Connect to server and select databse
    mysql_connect("$host", "$username", "$password")or die("cannot connect to server");
    mysql_select_db("$db_name")or die("cannot select DB");
    $sql="SELECT * FROM $tbl_name WHERE session='$session'";
    $result=mysql_query($sql);

    $count=mysql_num_rows($result);
    if($count=="0"){

    $sql1="INSERT INTO $tbl_name(session, time)VALUES('$session', '$time')";
    $result1=mysql_query($sql1);
    }

    else {
    "$sql2=UPDATE $tbl_name SET time='$time' WHERE session = '$session'";
    $result2=mysql_query($sql2);
    }

    $sql3="SELECT * FROM $tbl_name";
    $result3=mysql_query($sql3);
    $count_user_online=mysql_num_rows($result3);
    echo "[ $count_user_online users online ]";

    // if over 10 minute, delete session 
    $sql4="DELETE FROM $tbl_name WHERE time<$time_check";
    $result4=mysql_query($sql4);

    // Open multiple browser page for result


    // Close connection
    mysql_close();

}
4

2 に答える 2

2

セッション変数を設定し、そのセッション変数が設定されていない場合にのみ訪問者カウンターをインクリメントします。

于 2012-12-16T22:24:54.247 に答える
0

このようなもの:

session_start();
if (!isset($_SESSION['counted']))
{
    $_SESSION['counted'] = TRUE;
    /* ADD TO COUNTER */
}

そうすれば、Web サイトへの最初のエントリのみがカウントされます。これは、さまざまな難解な理由から 100% 絶対確実というわけではありませんが、ほとんどの Web サイトには十分な解決策です。HTH、〜レイ

于 2012-12-16T22:41:28.400 に答える