0

IPを取得して、自分のWebサイトの特定のページへの一意の訪問者の記録を含むデータベースを構築しようとしています。

以下のコードは、訪問者のIPを取得します。

$getip = $_SERVER['REMOTE_ADDR'];
echo "<b>IP Address: $getip</b>";

しかし、さまざまなインターネットユーザーが特定のインターネットネットワーク上にいて、すべてが異なるコンピューターを使用して同じIPアドレスを共有している場合(公共のサイバーカフェのように、または以下の例を参照)、これは非常に信頼性が低く、不正確であることに気付きます。

例:

XYZ Ltdのすべての従業員が会社のインターネット接続を介してインターネットに接続されており、XYZ LtdのIPアドレスが69.18.107.24である場合、XYZLtdは特定のインターネット接続を使用します。XYZの従業員の一部が私のページにアクセスした場合、上記のコードはユーザーのコンピューターの一意のIPアドレスを教えてくれません。むしろ、アプリケーションが見るであろう不正確で欺瞞的な会社のIPアドレス(69.18.107.24)を取得し続けます。同じ訪問者としてそれを使用しますが、インターネット接続IPを使用する訪問者は異なります。

同じインターネット接続を共有しているかどうかに関係なく、ユーザーのコンピューターに基づいて一意のユーザーIPを取得するにはどうすればよいですか。

私はPHPクッキーを使いたくありません。一部のブラウザはそれをサポートしていませんが、一部のユーザーはそれを無効にしているなどです。

これで助けを得るのは非常にありがたいです...ありがとう!

4

3 に答える 3

3

それはいけません。IP アドレスは、データ パケット配信メカニズムです。特定のネットワーク内の IP アドレスが 1 台の特定のマシンに固有であることを保証するものは何もありません。そのような相関関係はまったくありません。マシンはそのネットワーク内で一意のアドレスを持っていますが、このアドレスはグローバルに一意ではない可能性があります (とにかくこの IP を取得することはできません)。共有プロキシのパブリック IP は、パブリック インターネット上で一意ですが、1 つの物理マシンに対応しなければならないという規定はありません。

IP != マシン、それと共に生きる。

于 2013-02-25T17:18:43.640 に答える
3

共有接続の背後にあるコンピューターのローカル IP を取得することはできません。それらを取得できたとしても、それらは再利用されるため、一意ではありません。それがNATの要点です。192.168.1.1または類似のアドレスを使用している人がたくさんいるでしょう。

同じ IP アドレスを共有する複数のマシンを区別したい場合は、異なる傾向にあるユーザー エージェント文字列など、別の要素を追加できます。

例えば:

<?php
md5(
    $_SERVER['REMOTE_ADDR'] .
    $_SERVER['HTTP_USER_AGENT']
);
// 80b567b7c7ccfbda75a9712f16ca4429

2 人のユーザーが同じ IP アドレスを共有し、同じブラウザーとオペレーティング システムのバージョンを使用している場合にのみ、同一のハッシュが得られます。

Panopticlickにアクセスして、「ブラウザ フィンガープリント」の詳細を確認してください。驚くべきことに、ブラウザーは構成の組み合わせにおいてほぼ独自のものです。ディスプレイの解像度、インストールされているプラ​​グインのバージョン、その他の詳細にアクセスできる Javascript を使用してクライアント側の分析を行うと、共有 IP を持つユーザーを簡単に区別できます。

于 2013-02-25T17:34:29.533 に答える
-1

これがあなたの質問に対する答えです:

<?php

echo "IP address".$_SERVER["REMOTE_ADDR"]

echo "LAN Address".$_SERVER["HTTP_X_FORWARDED_FOR"] 
?>

これは、ユニークな訪問者を獲得する確実な方法ではありません。LAN アドレスは簡単に偽装できます。また、多くの企業は、毎日新しい LAN IP を配布する DHCP サーバーを使用しています。クッキーは、「唯一の」実際の確認方法です。

于 2013-02-25T17:24:01.187 に答える