• 締切済み

擬似クライアントプログラムでセッションを認識させたい

サーブレットでのセッションの扱いは、クライアントにセッションIDをCookieとして保存しておき、次回以降のアクセスではクライアントからそのIDをサーバに通知することにより、セッションを維持するという仕組みですよね。 そこで、以下のようなコードを含むクライアントプログラムを動作させました。 // cookieのハンドリングにCookieManagerを設定 CookieManager cookieManager = new CookieManager(); CookieHandler.setDefault(cookieManager); HttpURLConnection conn = ... // 1度目の通信 conn.disconnect; conn = ... // 2度目の通信 conn.disconnect; この状態でHttpURLConnectionを使用してサーブレットと通信を行うと、CookieHandlerが自動的にCookieのやりとりを行ってくれるため、セッションIDのやりとりについても自動化してくれて、サーバとの通信でセッションが確立できるはずです。(この情報の信頼性がいまいちです) しかし、私が試した限りでは、セッションは保持されませんでした。 擬似クライアントの変わりにブラウザで試してみましたが、きちんとセッションは認識されるので、サーブレット側の問題ではありません。 また、CookieManagerはcookieをメモリ上に保存しますが、擬似クライアントは同一VM上で複数回の接続を試しています(よって揮発している可能性はありません)。 そして、サーブレット側で(セッションではなく)cookieを意図的に食べさせた場合には、きちんとその内容を復元することができます。 セッションやCookieManager等についての私の認識が誤っていることが原因だと思うのですが、おかしなところがあればご指摘お願いします。

みんなの回答

回答No.1

使ったことないのでよくわかりませんが、ググッてみたら出てきましたよ。参考になると良いのですが。。。

参考URL:
http://itpro.nikkeibp.co.jp/article/COLUMN/20070801/278817/?ST=develop
ggaogg
質問者

お礼

解決しました。 JavaSE APIに、ちゃんと書いてありました・・。 // this should be done at the beginning of an HTTP session CookieHandler.setDefault(new CookieManager()); // this can be done at any point of an HTTP session ((CookieManager)CookieHandler.getDefault()).setCookiePolicy(new MyCookiePolicy()); セッション開始の前に自前の(デフォルトでない)クッキーポリシーを設定しろと書いてあります。 もっとちゃんと読んでいれば・・。chomakichiさん、お時間とらせて申し訳ないです。 具体的には、以下のコードを追加することで解決しました(Java6)。 cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL); CookiePolicyインスタンスは、大きく分けて3つ用意されているようですが、セキュリティ等の面も考えると、実際に自分で実装する必要があるようです。 しかしテストのための擬似クライアントとしてならばこのコード(すべてのクッキーを許可)で問題ないと思います。

ggaogg
質問者

補足

すみません、参考になりませんでした。 クッキーはうまくいくんです。 しかしセッションになるとうまくいかないんです。 まるでセッションIDの保存にcookieが使われていないかのようにです。 提示して頂いたサイトの情報では、クッキーの事しかわかりません。

関連するQ&A