ホームページ >バックエンド開発 >PHPチュートリアル >上司、少し混乱しています。
教えてください、上司の皆さん、私は何か混乱しています。
私のシステム (CMS) には次のような検索ページがあります。次のコードは、ユーザーが頻繁に検索するのを防ぐためのものです。
$lockfile = './time.lock.inc'; lock.inc コンテンツは次のとおりです: 1337659312
$lasttime = file_get_contents($lockfile);
if(!empty($lasttime) && ($lasttime + $cfg_search_time) > time())
{
ShowMsg('頻繁に操作しないでください','-1');
exit();
}
各検索後、現在時刻が time.lock に更新されます。 inc
このコードは、実際には、指定された $cfg_search_time 内にすべてのユーザーが 3 つ以上の操作を同時に実行できないようにしますが、これは明らかに不適切です。
理由は次のとおりです (適切かどうかはわかりませんが)。分析にご協力ください:
$cfg_search_time=1 の場合、理想的には時間を無駄にすることなく同時に 20 人が参加できます。同時検索の状況(サーバーやネットワーク速度の消費時間は無視)で20秒かかる
このような状況なので、time.lock.incに1つのIPと2つの情報を保存するように改善したいと思います。 1 つのタイムスタンプ
$dataiplist0=>array( '14.453.22.55'=>1337659312,...);
?>
その後、毎回 IP を取得し、検索するたびに指定した IP を検出します。同じ IP は 1 秒以内にのみ検出されるため、同時に検索できますが、内部ネットワーク セグメント内のユーザーが同じ外部ネットワーク IP を使用している場合に問題が発生します。インターネットにアクセスすると、内部ネットワーク全体が 1 人のユーザーとして扱われる可能性があります。以前にこれらの問題に遭遇したことがありますか?どのように対処しましたか?
最後に聞きたいのですが、これでユーザーによる悪意のある嫌がらせを効果的に制御できるのでしょうか? もしそうでない場合、何か良い提案をいただけますか? 。 。
-----解決策---------
セッション ID をキー、値を最後の検索のタイムスタンプとして、配列をこのファイル
に保存します。
------解決策---------
この方法では、検索者は多くのことを知らないはずなので、もちろん、個人(アクション)フォーラムを除きます
データを保存するためにmemcacheを使用できます
IP+ユーザー名+検索時間の組み合わせを使用して判断します
------解決策----------------------
最初のロックはすべてのユーザーを対象としているため、ファイル ロック
を使用するのが正しいです。後で、単一のユーザーのみをロックしたい場合は、セッションを使用します
------解決策------
ハッカーを防ぎたい場合はセッション制御で十分です。とにかく、セッションはそれらに影響を与えず、Cookie を送信しないでください。
------解決策---------
新しいテーブルを作成し、そこに検索されたユーザーを入れます。記録があるか、または時間が特定の範囲内であるかどうかを判断します。これ以上の調査は許可されません