2012-02-03 6 views
1

皆さん、あなたはサーブレット/ JSPを打ったときに、アプリケーション・サーバーが自動的にセッションを開始することを可能するために使用しJAX-RS、RESTEasyの:いいえセッションクッキー

。全体を通して追跡される最初の動的応答にセッションクッキーを置きます。

私は休憩バックエンドを持っており、セッションクッキーが取引されていないことに気付きました。だから私は、手動でJSESSIONIDクッキーを送信するためのコードを追加します。

@Context 
private HttpServletRequest httpRequest; 
// ... 
@GET 
@Path("/{rcpGuid}") 
public Response myMethod(...) 
{ 
    final HttpSession session = httpRequest.getSession(); 
    final String sSessionId = session.getId(); 
    ... 
    return Response.status(Response.Status.SEE_OTHER). 
     location(redirectUrl).cookie(new NewCookie("JSESSIONID", sSessionId)); 
} 

さて、これは何のSet-Cookieヘッダーがなかったところの前に戻されてJSESSIONIDクッキーの2つのコピーを引き起こしています。これは私のブラウザのインス​​ペクタで今見ている通りです:

Set-Cookie:JSESSIONID=sdm-Q1P6pRoQbKd4-9cJylGb; Path=/nn, JSESSIONID=sdm-Q1P6pRoQbKd4-9cJylGb; Version=1 

これは機能している限り私は気にしません。しかし残念ながら、私のブラウザがリダイレクトされるURLを要求する(応答が "SEE_OTHER"であることに気付く)場合、そのリクエストはセッションIDを保持しません。これは、私のアプリが正しく機能しない原因になります。

洞察?

+0

クライアントサイドフレームワークとは何ですか?クライアントがサーバーから送信されたセッションIDを無視/拒否している可能性があります。私はJerseyクライアントAPIを使用し、ボックスの外にあるすべてのクッキーを拒否するフードの下でJavaのクッキーメカニズムを使用するため、これについてのみ言及します。 – Pace

+0

クライアントはJQuery JavaScriptです。 – Raj

+0

RESTデザインはステートレスです。なぜあなたはクッキーを必要としますか? :-) – haraldK

答えて

5

サーブレット/ JSPをヒットしたときにアプリケーションサーバーが自動的にセッションを開始するのに使用されました。全体を通して追跡される最初の動的応答にセッションクッキーを置きます。

httpRequest.getSession()が呼び出されるまで、アプリケーションサーバーはセッションを作成しません。

私は休憩バックエンドを持っており、セッションクッキーは取引されていないことに気付きました。だから私は手動でJSESSIONIDクッキーを送信するためのコードを追加します。

をあなたの例では、getSession()を呼び出し、別のjsessionidクッキーを作成します。それはあなたが2つのクッキーを持っている理由を説明します。どちらもしなければ、jessionidはまったくありません。

0

これはRESTバックエンドなので、JSESSIONIDクッキーを持たず、バックエンドエンドポイントをステートレスとして保持する必要があります。

ウェブサービスの結果を得るために必要なすべての情報は、ウェブサービスへのリクエストに含まれている必要があります。 Webサービスは冪等です。

関連する問題