PHPでフォームを作成しています。ユーザーのIPアドレスの記録を保持したいと考えています。これは私が使用したコードの抜粋です:
<input type="hidden" name="ip" value="<?php echo $_SERVER['REMOTE_ADDR']; ?>" />
XAMPPでコードを開いてソースを読み取ると、値には私のものとは異なるIPアドレスがありました。
<input type="hidden" name="ip" value="::1" />
ローカルホスト(XAMPP)で使用すると、このIPアドレスは通常発生しますか?
そうでない場合、ユーザーのIPアドレスを取得する代替手段はありますか?
_
<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)アドレスの取得は正常です。
IP ::1
はIPv6バージョンでは「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'];
}
1)。フォームに<?php echo $_SERVER['REMOTE_ADDR']; ?>
を追加する必要はありません。この場合、それを偽造するのは簡単です(実際には、どんな場合でも簡単です)。サーバー側のデータにIPを追加することをお勧めします。
2)$_SERVER['HTTP_X_FORWARDED_FOR']
も参照できます。ユーザーがプロキシを持っている場合、それらのいくつか(透過プロキシ)は実際のユーザーのIPをそこに配置します。
3)ただ注意してください:IPに関するデータはまったく信頼できません。
':: 1'はIPV6バージョンのlocalhost(または127.0.0.1)です。
ポート80を開き、IPアドレスからページにアクセスします。その後、正常に動作するはずです:)。
これは実際にはあなたのIPです。ただし、IPv4ではなくIPv6 IPです。
IPv6では、:: 1はlocalhost/127.0.0.1を表します。
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を持っています。これを理解していない場合は、IP、ローカルIP、およびその他すべてについて実際に調査する必要があります。