3

サーブレット API を介して HTTP セッションにカスタム ID を割り当てることは可能ですか?

たとえば、Tomcat などの任意のアプリケーション サーバーからのセッション処理では、一意の ID を生成するだけで十分です。しかし、ユーザーごとの情報と時間に基づいてカスタムの一意のセッション ID を持っているので、繰り返されません。

また、セッション処理に関するすべてのドキュメントを調べましたが、必要なものがどこにも見つかりません。

これはプロジェクトの要件であるため、それが不可能な場合は、その理由を知る必要があります (または、API を介してのみ利用できないのでしょうか?)。

4

3 に答える 3

4

Tomcatを使用している場合は、カスタムセッションマネージャーを作成できる場合があります(この説明を参照)。その後、Tomcat Sessionオブジェクトにアクセスし、setIdを呼び出すことができます。

于 2008-10-13T02:01:33.010 に答える
2

サーブレットAPIは、独自のCookie値の作成をサポートしていません。実際、セッションがCookieを介して維持されることを保証するものではありません...具体的には、「URL書き換え」などのメカニズムを介してセッションを維持できると述べています。セッションが何らかの方法で維持され、ブラウザに渡されて返される何らかの一意のIDが必要になることは保証されますが、サーブレットコードのサーブレットAPIには、使用される値を制御するメカニズムはありません。また、私が知っている一般的なサーブレットコンテナ(Tomcatなど)は、この値を制御する手段を提供しません。

ただし、私があなたの要件を正しく理解していれば、これはあなたにとって問題にはならないはずです。Tomcat(または使用するサーブレットコンテナ)が独自のアルゴリズム(セッションIDの「推測」を防ぐための暗号的に安全な乱数ジェネレータなどを含む)に基づいて一意のIDを作成しているからといって、作成できないという意味ではありません。要件を満たすSEPARATEID(ユーザーと時間に基づいて、すべてのセッションで一意...必要なものは何でも)。このIDは、セッションに保存することも(必要な場合)、ブラウザーの別のCookieに保存することもできます(セッション間で維持する必要がある場合)。唯一の効果は、ブラウザが2つのCookieを保存していたことです。ほとんどのウェブサイトは、それよりもはるかに多くのCookieを保存しています。

于 2008-10-13T00:27:46.320 に答える
1

ええと...一意のIDを生成するコードがある場合は、次のようにすることができます。

/** 
 * The String key of the user id attribute.
 */
public static final String USER_ID_KEY = "userIdKey";

// Set the user attribute (createUniqueUserId's parameters and return type are up to you)
httpSession.setAttribute(USER_ID_KEY, createUniqueUserId());

// Retrieve the user attribute later
httpSession.getAttribute(USER_ID_KEY);

HttpSessionインターフェースは、getId()メソッドも提供します。これは、ここに文書化されています(参照用に文書をコピーします)。

public java.lang.String getId()

このセッションに割り当てられた一意の識別子を含む文字列を返します。識別子はサーブレットコンテナによって割り当てられ、実装に依存します。

戻り値:このセッションに割り当てられた識別子を指定する文字列

于 2008-10-13T00:12:47.160 に答える