2011-10-18 6 views
3

GETによるURLのパラメータに基づいてMySQL挿入クエリを作成するPHPスクリプトがあります。私は今日、同じLANから来ているように見える2人のユーザーが、重複したレコードを持っていることに気づいた。最初のレコードはproxy.organization.tldに解決されたIPで、数分後に別のIP住所。重複要求の原因となるプロキシサーバー?

これは、プロキシサーバーがHTTPリクエストを作成し、コンテンツをキャッシュする可能性があると推測しています。誰もがこれに対処するためのアイデアや戦略を持っていますか?私は重複したエントリーを防止したい。

ありがとうございました。

答えて

2

各URLの後に一意の値を追加します。このようにして、プロキシサーバーがURLを「再呼び出し」すると、重複した呼び出しであることが検出されます。

+0

値をmd5ハッシュしてテーブルに記録し、そのmd5ハッシュが現在ifステートメントでテーブルに存在するかどうかを確認し、それがなければinsertステートメントのみを実行していました。 't。あなたのユニークな価値観を少し解説し、これをどのように達成するかを記述してください。 – JohnCharles117

+0

プロキシサーバーがWebサイトを呼び出す(または再呼び出しする)と、元の呼び出しと同じurl_query文字列しか送信できません。したがって、ユーザーがページにアクセスした場合(おそらく、insert.php?value = avc&unique = qwerty)、プロキシサーバーは同じアドレスでのみ呼び出します。同じユニークな値が渡されます。リピートコールを除外するために、おそらく最後の50の一意の値を含むテーブルを格納するだけです。 – iWantSimpleLife

0

不要な重複挿入が存在する可能性がある他の理由があります。たとえば、ブラウザはページをプリフェッチできます。スパイダはリンク先にすることはできません。

GET要求によってデータが変更されると、設計上の欠陥があります。 GETは読み取りにのみ使用し、POSTはデータの変更に使用する必要があります。ブラウザ、プロキシ、またはスパイダーは、POSTリクエストに副作用がある可能性があることを認識しており、反復しないようにすべての予防措置を講じる一方、GETリクエストは副作用がないと言います。したがって、パフォーマンスを向上させるために必要に応じて繰り返しまたはキャッシュすることができます。

関連する問題