2009-09-05 23 views
8

自分自身のセッションコードを使用していると仮定すると、Javaで一意で安全なセッションID Cookieを生成する正しい方法は何でしょうか。gwt rpcのセッションIDクッキー

私は自分自身を圧倒してはいけませんが、既に標準化されているものを使用してください。

私はgwtとGoogleのアプリケーションエンジンプラットフォームを使用しています。

セッションをブラウザ/サーバーの再起動後も継続するにはどうすればよいですか?

+0

Google App Engineでセッションを使用できます。私は更新された答えのリンクを提供しました。 –

+0

セッションをブラウザ/サーバーの再起動後も継続するにはどうすればよいですか? –

+0

セッションを再起動しても永続化させる方法の1つは、セッションをファイルストアまたはデータベースにバックアップすることです。これは、ほとんどのアプリケーションサーバーでセッションフェールオーバーメカニズムがどのように機能するかを示しています。しかし、Google App Engineでこれがなぜ必要なのか不思議です。 –

答えて

2

いいえ、あなたは自分自身を圧倒してはいけません。

セッションIDは、暗号的にランダムである必要があります(既知の情報源からは推測できません)。この権利を自分で得るのは難しいです。

1

理想的には、基礎となるフレームワークのセッション管理機能に頼るべきです。サーブレット& JSP、Struts、Springにはこのサポートがあります。

ごくまれに、独自のフレームワークを作成して、頼りになるセッション管理機能がない場合は、まずjava.security.SecureRandomクラスを使い始めることができます。もちろん、壊れたセッション管理が壊れた認証と同じであるため、ここでホイールを再構築しないでください。

更新

は、Google App Engineを使用していることを考えると、あなたはエンジンが提供するセッション管理機能に依存している必要があります。 It seems that it is not switched on by default。クライアントコードで

String jSessionId=this.getThreadLocalRequest().getSession().getId(); 

:リモートサービス実装クラスで

+1

セッション管理はJ2EE仕様の一部であり、アプリケーションサーバー/サーブレットコンテナによって実装されています。だから、 "あなた自身のフレームワークを書く"というのは、 "生のHTTPプロトコルの上にコードを書く"ことを意味しない限り、あなたは常にセッション管理を頼りにしています。 – ChssPly76

+0

はい、そうです。 –

+0

ところで、Axis 1.xはSecureRandomクラスを使ってセッション管理を実装しています。なぜ彼らがそれを選んだのか分かりませんが、これは私が遭遇した唯一の一回限りのケースです。 –