私が使用した古いWeb開発プラットフォーム(数年前)では、これは組み込み関数を使用して解決されました。アイデアは、サーバーがURLのある種の内部コレクションを維持し、それらを単純な数値にマップするというものでした。コレクションに新しいURLを追加すると、サーバーは最初にその正確なURLがすでに存在するかどうかを確認し、存在する場合は関連する番号を返します。追加したURLが新しい場合は、それが追加され、新しい番号が返されます。
説明のためのいくつかのサンプル...ユーザーがページから始めたと仮定しましょう:
http://foo.bar.com/search/
このページを「ページ1」と呼びます。検索する条件を追加すると、次のページに結果が表示されます。
http://foo.bar.com/search/results?jobTitle=CEO&etc&etc
これを「ページ2」と呼びます。このページで、ユーザーはクリックして特定の結果を開き、次のページに移動できます。
http://foo.bar.com/search/results/12313
それを「ページ3」と呼びます。
2ページと3ページの「前に戻る」機能を使用するには、1つの追加のクエリパラメータを使用して開く必要があります。ページ1がページ2のURLを生成しているとき、サーバーはユーティリティメソッドをSaveUrl()
(適切なクラスで)呼び出し、結果をクエリ文字列に追加して、ページ2のURLが次のようになるようにします。
http://foo.bar.com/search/results?jobTitle=CEO&etc&etc&return_url=1
新しいreturn_url=1
クエリパラメータに注目してください。次に、ページ2は、対応するGetReturnUrl(1)
メソッドを使用して、「前に戻る」リンクで使用するURLをフェッチします。この呼び出しにより、以前に追加されたURLが返されますhttp://foo.bar.com/search/
。
2ページから3ページに進むには、同じを使用して新しいクエリ文字列パラメータを追加する必要もありますSaveUrl()
。3ページ目の新しいURLは次のようになります。
http://foo.bar.com/search/results/12313?return_url=2
3ページ目では、「前に戻る」ページのURLはGetReturnUrl(2)
、を使用してフェッチされます。これにより、が返されhttp://foo.bar.com/search/results?jobTitle=CEO&etc&etc&return_url=1
ます。
したがって、このシステムは、現在のページのURLを保存し、そのURLを次のページに提供することで機能します。また、現在のページのURLには、クエリパラメータの形式で現在のページの前のページへの参照が含まれているため、前のトレイルに戻ることが維持されます。
以前のトレイルに戻るのに賢い方法だと思うので、これを説明しようと思いました。ただし、これが業界標準またはベストプラクティスであるとは主張していません...
編集:このアプローチに関するいくつかの考えと考慮事項。
長所:
- これまでにない長いクエリ文字列を発生させることなく、URLを保存および取得する簡単な方法
短所:
- URLに戻るために必要なすべての状態が含まれている限り機能します。
- 実装の詳細(グローバルURLコレクション?セッションでのユーザー固有のURLコレクション?SQLサーバーで永続化?)によっては、Webファームで問題が発生する可能性があります(すべてのサーバーは、どのURLが「1」として保存されるかについて合意する必要があります)。
- トラフィックの多いサイトでメモリの問題が発生する可能性があります(ただし、特定の実装によっても異なります)