php-最も人気のあるQUERY_STRINGを表示する
データベースのデータを表示するページがあります。ユーザーがデータを表示する前に、いくつかの選択ボックスがあるため、特定の期間のデータを表示することを選択するなど、さまざまな方法でデータをフィルタリングすることを選択できます。 getメソッドを使用しているため、URLは次のようになります。
http://www.example/com?report=2&days=7&etc=2
これはすべて正常に機能し、ユーザーはデータをフィルタリングして、必要なさまざまな結果を得ることができます。アナリティクスアカウントを表示していますが、一部のクエリが他のクエリよりも人気があることがわかります。どのクエリが最も人気があるか(たとえば、過去24時間に最も多く表示された)をユーザーに知らせるにはどうすればよいですか。現在、Analyticsデータに基づいて午前中に更新する手動のhtmlテーブルを作成しました。
例
クエリ リンク
過去7日間のデータを表示 表示
ID、クエリ、タイムスタンプを含むcountというテーブルを追加して、
と言うことを考えました。
$a='report=';
$b=$_SERVER['QUERY_STRING'];
if($b == $a . $report['id'])
{}
else
{//Insert id, query, timestamp into the database}
このようにして、追加の並べ替えパラメータを持つクエリで特定の期間のカウントを実行できます。これを達成するための最良の方法ですか?
わからない
0 レビュー
答え :
解決策:
URLとタイムスタンプのクエリ部分を格納するテーブルを作成します。最新の呼び出しの現在の合計を取得するため、他のフィールドは必要ありません。
次に、
のようなものを取得します
select url,
count(*) as reqs
from queries
where ts > now() - interval 24 hour
group by url
order by reqs desc
過去24時間に最もリクエストの多かったURLを取得します。
答えへのリンク
わからない
0 レビュー
答え :
解決策:
もう少し進んで、次の点を考慮します:
http://www.example/com?report=2&days=7&etc=2
は基本的に次と同じです:
http://www.example/com?report=2&etc=2&days=7
表現内容に関しては、 $_SERVER['QUERY_STRING'];
が異なるため、前述のアルゴリズムでは2つの異なるレポートとして記録されます。
また、アプリのビジネスロジックの観点からは、追加のパラメータは使用されない可能性がありますが、存在します:
http://www.example/com?report=2&etc=2&days=7&utm_source = feed
それで、クエリのキーを形成するパラメータを少し処理します:
- パラメータ名で並べ替え
- 実際に重要なパラメータのみを考慮してください
答えへのリンク
わからない
0 レビュー
答え :
解決策:
タイムスタンプ、レポート、日数などを含むテーブルを作成し、それらをキーとして使用する必要があると思います。
次の場合、これははるかに安全です:
-
いつでもパラメータはPOST(フォーム)で送信される可能性があり、URLには含まれません。
それらの一部がCOOKIESまたは他のソースからのものである可能性がある場合はいつでもURLに含まれません。
-
URLに他のオプションを追加することにしました。これは、ページごとに変わる可能性がありますが、表示されるレポートの種類は変更されません。たとえば、&viewkind = 2&colorset = 3などのスタイルオプションや、ランダムに追加してキャッシュを無効にします。 &rnd=83732または将来決定する可能性のあるその他のもの。
-
ハッシュ#nameのようにURLに追加されたものはすべて干渉する可能性があります(ページの下半分にある名前付きアンカーにジャンプすると、別のレポートと見なされます)
-
また、データベースを攻撃するために完全なURLを偽造することは、単一の整数または文字列名パラメーターを偽造するよりもおそらくはるかに簡単です
-
また、URLを異なるものにするさまざまな方法でサイトが呼び出される場合があります。 wwwが前面にあるかどうかにかかわらず、安全な場合はhttpsを使用します。一部のパラメータにはデフォルト値がある場合があります。たとえば、日を指定しない場合は、たとえばdays = 1と同じであるため、レポートは同じですがURLが異なる場合があります。
答えへのリンク
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。