ユーザーが 24 時間に 1 回だけ投票できる機能を構築しています。
ここに私のデータベース構造があります
id ip timestamp userid
9 127.0.0.1 2013-06-27 16:52:49 35
この関数を使用して、ユーザー クライアントのアップ アドレスを取得しました。私はローカルホスト環境にいて、パブリック IP の代わりにローカルホスト IP 127.0.0.1 を与え続けます。何か問題がありますか?
function get_client_ip() {
$ipaddress = '';
if (getenv('HTTP_CLIENT_IP'))
$ipaddress = getenv('HTTP_CLIENT_IP');
else if(getenv('HTTP_X_FORWARDED_FOR'))
$ipaddress = getenv('HTTP_X_FORWARDED_FOR');
else if(getenv('HTTP_X_FORWARDED'))
$ipaddress = getenv('HTTP_X_FORWARDED');
else if(getenv('HTTP_FORWARDED_FOR'))
$ipaddress = getenv('HTTP_FORWARDED_FOR');
else if(getenv('HTTP_FORWARDED'))
$ipaddress = getenv('HTTP_FORWARDED');
else if(getenv('REMOTE_ADDR'))
$ipaddress = getenv('REMOTE_ADDR');
else
$ipaddress = 'UNKNOWN';
return $ipaddress;
}
この機能の私のロジックに何か問題がありますか、私の考えは
1) 最初のクエリ テーブルで、ユーザーの IP が保持されているかどうかを確認します。2) 投票のタイムスタンプを現在のタイムスタンプと照合し、投票時間が 24 時間前の場合は、再度投票できるようにします。
私の懸念はタイムスタンプではなく、ipaddress です。彼がプロキシの背後にいる場合でも、私が構築した関数が彼の IP アドレスを取得するのに十分であるかどうかはわかりません。
アドバイスをいただければ幸いです。ありがとう
乾杯