0

ユーザーが 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 アドレスを取得するのに十分であるかどうかはわかりません。

アドバイスをいただければ幸いです。ありがとう

乾杯

4

2 に答える 2