IP を取得するために使用している方法は、Apache Web サーバーではかなり標準的ですが、REMOTE_ADDR はユーザーを一意に識別するための信頼できる方法ではありません。また、他の人が指摘しているように、「HTTP_*」ヘッダーはどれも簡単に偽装できます。
大きな問題は、IP アドレスでユーザーを識別することは単純に問題があるということです。一般に、多数のユーザーがいることが予想される大規模なシステムでは、これを行うことはありません。頭のてっぺんから、それが故障するいくつかの状況を考えることができます。
- 一般的なルーターの背後に複数のユーザーがいるホーム ネットワーク。ルーターの背後にあるすべてのコンピューター/デバイスは、同じ IP から送信されます。
- PHP サーバーにリクエストを転送するロード バランサーの背後にプログラムをセットアップします。REMOTE_ADDR は、ロード バランサーの IP になります。
- プロキシ サービスを経由するユーザーはすべて、プロキシ サーバーと同じ IP を持ちます。
- 多くの場合、ISP は DHCP を使用して顧客に IP アドレスを割り当てます。可能性は低いですが、理論的には、DHCP リース時間が期限切れ/更新された場合、セッションの途中でユーザーの IP アドレスが変更される可能性があります。
セッションを使用すると、状況をより適切に処理できる可能性があります。IP アドレスを使用するのではなく、最初に表示されたときにユーザーにセッション トークンを割り当て、後続の要求で (Cookie または HTTP 要求の一部を介して) トークンが渡されるようにします。トークンを取得すると、それが同じユーザーであることをかなり確信できます (スニッフィング攻撃にもかかわらず)。
追加のボーナスとして、IP トラッキングとセッションを組み合わせて、必要に応じて物事をより堅牢にすることができます. たとえば、多くのアプリケーションは、多くの場合、ユーザーの IP が変更されたかどうかを把握しようとし、結果としてセッションを無効にします。