HTTP セッション管理は、Cookie または URL 再書き込みのいずれかを使用して、 HTTP トランスポート層で実行されます。 一連の要求のトラッキングに複数のオプションを提供することによって、 HTTP セッション管理は、アプリケーション・ユーザーから Java API for XML-Based Web Services (JAX-WS) アプリケーションが動的に見えるようにします。
JAX-WS 動的プロキシーまたはディスパッチ・クライアントを開発します。 JAX-WS クライアントの開発について詳しくは、Web サービス記述言語 (WSDL) ファイルからの JAX-WS クライアントの開発、または JAX-WS API を使用した動的クライアントの開発に関する説明を参照してください。
HTTP セッション管理を使用してサーバーのユーザー状態情報を保守し、セッションをトラッキングするための最小限の情報をユーザーに引き渡すことができます。 セッション Cookie または URL 再書き込みのいずれかを使用して、アプリケーション・サーバーに HTTP セッション管理を実装できます。
ブラウザー、アプリケーション・サーバー、およびアプリケーション間の対話は、 ユーザーとアプリケーション・プログラムにはトランスペアレントです。 通常、アプリケーションとユーザーには、サーバーが提供するセッション ID が分かりません。
セッション Cookie
HTTP 保守セッション・フィーチャーは、単一 Cookie の JSESSIONID を使用します。さらにこの Cookie にはセッション ID が含まれています。この Cookie は、そのセッション用にサーバーに保管されている情報と要求を関連付けるために使用します。 JAX-WS アプリケーションからの後続の要求で、セッション ID は、 要求ヘッダーの一部として送信されます。これを使用することにより、アプリケーションは特定のセッション ID に関する各要求をそのユーザーからの事前の要求と関連付けることができます。 JAX-WS クライアント・アプリケーションは、HTTP 応答ヘッダーからセッション ID を取り出して、 HTTP 要求ヘッダーにそのセッション ID を設定することにより、それらの ID を後続の要求で使用します。
URL 再書き込み
URL 再書き込みは、セッション ID を URL に保管するときに、 リダイレクト URL のように機能します。 セッション ID は、Web ページからサブミットされる任意のリンクまたはフォームでパラメーターとしてエンコードされます。 このエンコード URL は、同一サーバーに対する後続の要求に使用されます。
<!-- This is the PolicyType for HTTP transport --> <wsp:ExactlyOne> <wsp:All> <wshttp:readTimeout>300</wshttp:readTimeout> <wshttp:writeTimeout>300</wshttp:writeTimeout> <wshttp:connectTimeout>180</wshttp:connectTimeout> <wshttp:persistConnection>yes</wshttp:persistConnection> <wshttp:messageResendOnce>no</wshttp:messageResendOnce> <wshttp:chunkTransferEnc>no</wshttp:chunkTransferEnc> <wshttp:acceptRedirectedURL>no</wshttp:acceptRedirectedURL> <wshttp:sendExpectHeader>no</wshttp:sendExpectHeader> <wshttp:maintainSession>yes</wshttp:maintainSession> <wshttp:compressRequest> <wshttp:compressType name="none"></wshttp:compressType> </wshttp:compressRequest> <wshttp:compressResponse> <wshttp:compressType name="none"></wshttp:compressType> </wshttp:compressResponse> <wshttp:protocolVersion>HTTP/1.1</wshttp:protocolVersion> </wsp:All> </wsp:ExactlyOne>
Map<String, Object> rc = ((BindingProvider) port).getRequestContext(); ... ... rc.put(BindingProvider.SESSION_MAINTAIN_PROPERTY, Boolean.TRUE); ... ...