セッションについて(サーバーサイドJava)
Ajaxフレームワーク(DWR)を使いJavaScriptからJavaのメソッドを
呼び出すプログラム(一部)でセッション管理についてです。
下記のプログラムの様にコンストラクタでセッションのオブジェクト
を作成し、(クライアント)JavaScriptからJavaのaddMember()を実行してセッションの
設定を行なった場合、複数のクライアントからアクセスがあった時でも
そのクライアント数に応じたセッションが作成されるでしょうか?
それともコンストラクタでセッションのオブジェクトが一つしか作成
されていない為、クライアントがaddMember()を実行するたびに
セッションの設定が上書きされるのでしょうか?
もし上書きする場合で改善する場合はaddMember()の中で
context = WebContextFactory.get();
session = context.getSession();
session.setAttribute("userName", name);
session.setAttribute("loginId", id);
の様にセッションオブジェクトを作成してから
設定した方がいいのでしょうか?
以下Java(サーバー)プログラムです。
@RemoteProxy(name="DataManager", scope=ScriptScope.APPLICATION)
public class DataManager{
private WebContext context;
private HttpSession session;
public DataManager(){
memberList = new ArrayList<Data>();
context = WebContextFactory.get();
session = context.getSession();
}//コンストラクタ
///JavaScriptから呼び出すメソッド
@RemoteMethod
public String addMember(String nameStr){
String id = this.createId();
String name = this.strEscape(nameStr);
/////このメソッドが実行されるたびにセッションが上書きされる?
session.setAttribute("userName", name);
session.setAttribute("loginId", id);
---------------------[途中まで]-----------------------------
補足
コメントありがとうございます。 (1)のsid列とserial#の特定をどうやるかがわかっていません。DB接続時に自分のsid列とserial#を確実に特定できるものでしょうか? DB管理者がkillするだけなら目視確認すれば良いのでしょうか。。。 アプリケーションでは複数のログインユーザーIDを管理していますが、DB操作に使用しているOracle上のユーザーIDは1つなので特定するためのキーにはなりません。 (アプリケーションのログインユーザーIDは数が多く、かつ増減が多いのでNGと考えております。) DB接続直後にv$session-sidの最大値を取得し、それが自分のセッションだと判断するくらいでしょうか?