2011-11-15 15 views
10

私は、$_SERVER['REMOTE_ADDR']という値をMySQLデータベースに保存することでユーザーのIPアドレスを保存しています。問題は、FirefoxとChromeの両方で$_SERVER['REMOTE_ADDR']::1(つまり、のIPv6ホストであり、IPv6が)、IEとOperaの両方が127.0.0.1IPv4)であるという問題です。異なるブラウザ、異なるIP?

だから、私の質問は

  • は、IPのバージョンは、ブラウザに依存していますか。 (私はそれがコンピュータ に依存していると思っていました)

  • データベースには、IPv4アドレス用とIPv6用の2つのフィールドを作成する必要がありますか?

  • すべてのIPをIPv6に統一する必要がありますか?そして、PHPでこれを行うにはどうしたらいいですか?

答えて

6
  1. かなり明白 - あなたの箱がIPv6に対応している時はいつでも利用できるIEとOperaはない(または、それがオフすることにより、デフォルトの設定です)一方で、Firefoxの/ Chromeは、IPv6を使用しています。

  2. IPv6アドレスを保持するのに十分な長さの文字列にアドレスを格納します。

  3. いいえ、一般的にはそうすることはできません。

+0

:-) REMOTE_ADDRの値にあまり依存ししかし...ないのですか?つまり、ウェブページがChromeでの移動中にIPで禁止されているとすれば、Operaを使用してログを記録すると、バイパスできますか? – federicot

+2

いいえ2つの異なるアドレス空間を持つ2種類のネットワークトランスポートです。 2つのプロトコルのネットワークでは、ネットワークの設定に応じて、IPv6アドレスとIPv4アドレスが一致する場合と一致しない場合があります。 –

+1

@John Doe:理論的には、はい。あなたは2つの異なるIPを持っているので、1つをブロックすれば、もう1つは通過できます。実際には、おそらくそうではありません。 IPv6が有効なサイトはあまりなく、トンネリング/カプセル化なしでIPv6接続を提供するISPは少なくなります。 –

2

PHPの機能inet_ptonを使用して、人間が判読可能なIPアドレスをパック表現に変換します。その後、各IPアドレスをデータベースのBINARY(16)またはVARBINARY(16)フィールドに格納することができます。

2

ブラウザは利用可能なものを使用します。これはIPv4またはIPv6でもかまいません。また、セッション中に変更することもできます。さらに、ホストは多くのIPv6アドレスを持つことができるので、セッション中に変更される可能性があります。要するに

:同じIPではなく、唯一異なる表現で

+0

そう言われています。 IPなどしかし、この場合の正確さは私にとって非常に重要なものではないので、私はそれをスライドさせておきます。 – federicot

+0

@JohnDoe:それは単なる「極端な」精度の問題ではありません - 多くのオフィス、WiFiホットスポット、ホームネットワークネットワーク全体に対して単一のIPアドレスのみを使用します。あなたが同じスターバックスの異なるラップトップで2人の異なるユーザーを区別するのが気になるならば、IPアドレスでそれらを識別すべきではありません。 –

+1

@ JohnDoeあなたが言いたいのは、同じIPアドレスを使用している複数のユーザーについて話しています。複数の(IPv4および/またはIPv6)アドレスを使用する1人のユーザーについて話しています。これは、複数のパブリックIPv4アドレスを持つNAT444ゲートウェイの背後にあり、ユーザーがこれらのIPv4アドレスとIPv6アドレスを切り替えるため、複数のIPv6アドレスを持つ人がいるために発生します。 –

関連する問題