12

PHPでフォームを作成していますが、ユーザーのIPアドレスを記録したいと思います。これは私が使用したコードの抜粋です:

<input type="hidden" name="ip" value="<?php echo $_SERVER['REMOTE_ADDR']; ?>" />

XAMPPでコードを開いてソースを読み取ると、値のIPアドレスは私のものとは異なります。

<input type="hidden" name="ip" value="::1" />

このIPアドレスは、ローカルホスト(XAMPP)で使用すると通常発生しますか?
そうでない場合、ユーザーのIPアドレスを取得するための代替手段はありますか?

4

6 に答える 6

27

IPv6バージョンではIP::1は「localhost」です。お使いのマシンはIPv6で構成されているため、このIPアドレスを取得しています。おそらく、ライブサーバーにアプリケーションをデプロイすると、サーバーでIPv6が構成されず、アプリはより使い慣れたIPv4アドレス(例:aaa.bbb.ccc.ddd)を取得します。

別の注意点として、$_SERVER['REMOTE_ADDR']必ずしも正しいアドレスが含まれているとは限りません。使用することをお勧めします:

if(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ip_address = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
    $ip_address = $_SERVER['REMOTE_ADDR'];
}
于 2012-06-11T14:43:02.453 に答える
18

<input type="hidden" name="ip" value="<?php echo $_SERVER['REMOTE_ADDR']; ?>" />

そうしないでください。$_SERVERフォームが送信されたときからリクエストを取得します。フォームが生成されたときにそれを取得してフォームに保存することは、人々にそれを変更する機会を与えるだけです。

Does this IP address normally happen when I use it in a localhost (XAMPP)?

はい。ローカルホストからページを要求する場合、ローカルIP(IPv6)アドレスを取得するのは正常です。

于 2012-06-11T14:42:43.387 に答える
4

':: 1'はローカルホストのIPV6バージョン(または127.0.0.1)です。

ポート80を開き、IPアドレスからページにアクセスします。その後は正常に動作するはずです:)。

于 2012-06-11T14:42:23.543 に答える
4

1)。<?php echo $_SERVER['REMOTE_ADDR']; ?>フォームに追加する必要はありません。この場合、それを偽造するのは簡単です(実際にはどんな場合でも簡単です)。サーバー側のデータにIPを追加することをお勧めします。

2)あなたも見ることができます$_SERVER['HTTP_X_FORWARDED_FOR']。ユーザーがプロキシを持っている場合、それらの一部(透過プロキシ)は実際のユーザーのIPをそこに配置します。

3)注意:IPに関するデータはまったく信頼できません。

于 2012-06-11T14:46:49.017 に答える
1

これは実際にはあなたのIPです。IPv4ではなくIPv6IPですが。

IPv6では、::1はlocalhost/127.0.0.1を表します。

于 2012-06-11T14:42:41.597 に答える
0
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARTDED_FOR'] != '') {
                $ip_address = $_SERVER['HTTP_X_FORWARDED_FOR'];
            } else {
                $ip_address = $_SERVER['REMOTE_ADDR'];
            }   

このコードは、クライアントのIPを返します。これがサーバーIPであると思われる場合は、サーバーが(おそらく)PCでホストされているため、おそらく正しいでしょう。クライアント(PC)とサーバーは同じPCで実行されるため、両方とも同じIPを持ちます。これを理解していない場合は、実際にips、ローカルipsなどの調査を行う必要があります。

于 2015-08-05T10:31:19.383 に答える