現在、「hits.php」というファイルがあり、ページのヒットを追跡したいページでは、<?php include("hits.php"); ?>
を使用します。
ただし、ユニークビジターのみを追跡するにはどうすればよいですか?同じ人が更新できてヒット数が増えるので、私のヒット数は誤りです。
これが私の情報源です:
<?php
$hits = file_get_contents("./client/hits.txt");
$hits = $hits + 1;
$handle = fopen("./client/hits.txt", "w");
fwrite($handle, $hits);
fclose($handle);
print $hits;
?>
どうすればCookieチェックができるのかよくわかりません... IPをチェックする方法はありますか?または私は何ができますか?
StackOに感謝します。
最も簡単な方法は、Cookieのチェックです。
より良い方法は、SQLデータベースを作成し、IPアドレスを主キーとして割り当てることです。その後、ユーザーがアクセスするたびに、そのIPをデータベースに挿入します。
$_SESSION['logged']
をチェックするすべてのページに含まれる関数を作成します。この関数には、任意の「フラグ」を割り当てることができます。$_SESSION['logged']
が「false」を返す場合は、そのIPアドレスをMySQLデータベースに挿入します。$_SESSION['logged']
を「true」に設定して、IPを何度もログに記録するリソースを無駄にしないようにします。注:MySQLテーブルを作成するときは、「IPアドレス」フィールドをキーとして割り当てます。
<?php
session_start();
if (!$_SESSION['status']) {
$connection = mysql_connect("localhost", "user", "password");
mysql_select_db("ip_log", $connection);
$ip = $_SERVER['REMOTE_ADDR'];
mysql_query("INSERT INTO `database`.`table` (IP) VALUES ('$ip')");
mysql_close($connection);
$_SESSION['status'] = true;
}
?>
完璧な解決策はありませんが、最初の2つの方法(IPアドレスやCookie)が最も信頼性が高く、組み合わせた方が良い場合があります。
車輪の再発明ではなく、既成のソリューションを使用しました。商業的な理由で、私はグーグルアナリティクスを避けました(私はグーグルに私のウェブ統計を知られたくありません-彼らの最善の利益は私のものではありません)。非営利のウェブサイトや、広告にGoogleを使用していない場合はおそらく問題ありません。選択肢も数十あります。たとえば、Getclicky.comを使用します
$_SERVER['REMOTE_ADDR']
プロパティを使用してクライアントのIPアドレスを取得できますあなたができない場合はグーグルアナリティクスはどうですか。データベースを作成したり、IPを含む別のファイルを作成したりすることはできますが、そのようなフラットファイルでは複雑になる可能性があります。
私は非常に質の悪い解決策とそれを行うための迅速で汚い方法を見つけました。
私も似たようなものを開発していて、冗長性なしで機能する迅速な方法を考案していました。
誰かが別のユーザーのプロファイルにアクセスするたびにカウンターが必要でした。
擬似:
これは、同じユーザープロファイルにアクセスして、1日(または12時間)の更新時にカウンターに1を追加することを拒否しますが、Glenn Nelsonによる上記のソリューションは実際にカウンターに1を追加しますが、追加を拒否しますすべて同時にユーザーのカウンター。
これだけでなく、ログオフしてWebサイトに再度ログインすると、カウンターに再度追加されるだけで、場合によってはトロールやhaxorz志望者がこれを悪用します(セッションが破棄されて再開されるため)。
これが私のサンプルテーブルです:
users
{
user_id INT(8) auto increment, user_name varchar(32), user_counter INT(12)
};
daily_views
{
view_id INT(8) auto increment, viewer_name VARCHAR(32), viewee_name VARCHAR(32)
};
これが私が書いたサンプルコードです:
<?php
session_start();
$uname = $_SESSION['username'];
$vieweepage = $_GET['name']; //gets the name of the persons page/profile via previous page/form
$connect = mysql_connect("localhost","user","password") or die("Couldn't connect; check your mysql_connect() settings");
$database = mysql_select_db("database") or die("Could not locate database!");
$query = mysql_query("SELECT user_counter from users");
$query = mysql_fetch_row($query);
$counter = $query[0];
$viewcheck = mysql_query("SELECT viewer_name from daily_views WHERE viewee_name='$vieweepage'");
$viewrow = mysql_num_rows($viewcheck);
$newcounter = $counter + 1;
if($viewrow == 0)
{
$update = mysql_query("UPDATE users SET user_counter='$newcounter' WHERE user_name='$vieweepage'");
$insert = mysql_query("INSERT into daily_views (viewer_name, viewee_name) VALUES ('$uname', '$vieweepage')");
}
?>
タイムスタンプをjavascriptのlocalStoageに保存できます。 LocalStoageはブラウザによって削除されないため、保存して確認する必要があります。サーバーサイドチェックではないことは知っていますが、とにかく役立つかもしれません。
現在、visitorにremote address
とsession ID
を使用しています。1人のユーザーが1日に何度も訪問できず、カウンターは更新に依存せず、新しいセッションにのみ依存するため、有効な訪問者だと思います。