ホーム > アプリケーション・ビルダーの概念 > URL構文の理解 > セッションIDにゼロを使用したブックマークの容易化
前へ |
次へ |
アプリケーション内のページが公開されていて認証の必要がない場合、セッションIDとしてゼロを使用することで、アプリケーション・ユーザーは容易にページをブックマークできます。
認証の必要がないアプリケーション・ページは、セッションIDがゼロ(単一の数字0
)であるf?q URLを使用してアクセスできます。ブラウザにURLを入力するか、またはセッションIDに0
を含むリンクをクリックしてページをリクエストすると、Application Expressエンジンは新しいセッションIDを割り当て、新しいセッションIDを含むセッションCookieをブラウザに送信します。アプリケーションのパブリック・ページを介してナビゲートすると、パブリック・ページへの生成済リンクすべてにセッションID0
が含まれており、パブリック・ページへのブランチすべてに、表示されているセッションIDに0
を使用する新しいURLが含まれていることがわかります。ただし、Application Expressエンジンは、バックグラウンドでカレント・セッションIDとしてCookieのセッションIDを使用してセッション・ステートを指定します。
カレント・セッションIDを非表示にする場合にこの機能は有効です。セッションIDを非表示にすると、ブックマーク・リンクにセッションIDを含めなくてもページをブックマークできるようになります。さらに優れた点として、セッションIDにゼロを使用すると、実際のセッションIDを検索エンジンから見えないようにします。
アプリケーションのセッションIDとしてゼロを使用するには、ゼロ・セッションIDを含むリンクを少なくとも1つ生成する必要があります。このリンクを使用することでゼロ・セッションIDメカニズムが開始されます。1つの方法として、アプリケーションのホームページでゼロ・セッションIDを含む単一の静的リンクを提供する方法があります。たとえば、通常はページ2へのリンクにf?p=&APP_ID.:2:&APP_SESSION
をコード化するところで、f?p=&APP_ID.:2:0
をコード化します。
Oracleには、f?p構文を使用してアプリケーション・ページにアンカーを生成する際に開発者がPL/SQLを使用するためのユーティリティの機能があります。アプリケーションのPL/SQLでゼロ・セッションIDが要求される可能性のあるf?pアンカーが作成されるたびに、APEX_UTIL.PREPARE_URL
を使用します。詳細は、Oracle Application Express APIリファレンスの「PREPARE_URL」を参照してください。
ゼロ・セッションID機能では、HTMLにアンカーを持つページ(テンプレートやHTMLリージョンなど)がサポートされます。Application Expressエンジンがf?p
アンカーに直面した場合に、ある基準を満たしていると、そのアンカーを認識してセッションIDをゼロに置き換えます。
Application Expressエンジンは、次のいずれかのパターンを検出した場合に、セッションIDコンポーネントをゼロに置き換えます。
&APP_ID.
現行のアプリケーションの数値ID
次のいずれかのパターン:
すべて大文字またはすべて小文字で表された、現行のアプリケーションの英数字別名にコロンが続き、その後に現行のアプリケーションの公開ページの数値IDが続く
すべて大文字またはすべて小文字で表された、現行のアプリケーションの公開ページの英数字別名にコロンが続き、その後に&APP_SESSION.
または&SESSION.
が続く
ゼロ・セッションIDに置換される候補となるHTMLのパターンには、次のものがあります。
ページ10が公開ページの場合:
"f?p=&APP_ID.:10:&APP_SESSION.
ページ10が公開ページの場合:
"f?p=100:10:&APP_SESSION.
公開ページの別名がhome
の場合:
"f?p=&APP_ID.:home:&APP_SESSION.
公開ページの別名がHOME
の場合:
"f?p=&APP_ID.:HOME:&APP_SESSION.
アプリケーションの別名がPEOPLE
で、公開ページの別名がHOME
の場合:
"f?p=PEOPLE:HOME:&APP_SESSION
これらの例では、アプリケーションがゼロ・セッションIDモードで実行され、ユーザーが公開ユーザーである場合に、パターン&APP_SESSION.
(または&SESSION.
(非表示))がゼロに置き換えられます。次のPL/SQL式がtrueの場合に、ユーザーは公開ユーザーであるとみなされます。
:app_user in ('nobody','HTMLDB_PUBLIC_USER','PUBLIC_USER','ANONYMOUS','APEX_PUBLIC_USER')"