これまでのところ、JavaでのHttpSessionの概念を理解しています。
_ HttpSession ses = req.getSession(true);
_
リクエストに従って、セッションオブジェクトを作成します。
_setAttribute("String", object);
_
'、'、および値をセッションオブジェクトにバインドします。
_getAttribute("String");
_
指定された文字列に関連付けられたオブジェクトを返します。
私が理解できないのは:HttpSession ses = req.getSession(true);
のようなセッションオブジェクトを作成し、setAttribute("String", object);
を呼び出して名前を設定しています。ここで、このコードはサーバー内にあります。すべての人に対して、彼がログインしようとすると、サーバーで同じコードが実行されます。 setAttribute("String", object);
このメソッドでは、文字列値は定数です。したがって、作成された各セッションオブジェクトは、私が提供した同じ文字列によってバインドされます。文字列を取得してセッションを検証しようとしたとき、またはログアウトアクションが実行されたときにgetAttribute("String");
は同じ定数文字列値を返します(私は正しいです!! ??実行の論理について考える)。次に、どうすれば無効にできますか?.
このタイプのイラストは、WEB上のすべてのチュートリアルで見ました。その属性を設定する実際の方法ですか?または、実際のアプリケーション開発者は、「String」フィールドに変数を指定して動的に設定します
_(ie. session.setAttribut(userName, userName); //Setting the String Dynamically.. I dono is it right or not.)
_
そして私の最後の質問は
_WebContext ctx = WebContextFactory.get();
request = ctx.getHttpServletRequest();
_
上記の2行は何をしますか? ctx&requestには何が保存されますか? HttpSession ses = req.getSession(true);
は、新しいセッション手段を作成します。 sesに格納されている値。
いくつかの[ランダム]精度:
request.getSession(true)
を呼び出すたびに、HttpRequest
オブジェクトが検査され、URLパスパラメータ(セミコロンに続くもの)のCookieまたはOR/ANDでエンコードされたセッションIDが検索されます)。セッションIDが見つからない場合は、サーブレットコンテナ(つまりサーバー)によって新しいセッションが作成されます。response.encodeURL()
メソッドを使用して変更する必要があります。 request.getSession(false)
または単にrequest.getSession()
を呼び出すと、セッションIDが見つからないか、セッションIDが無効なセッションを参照している場合、nullが返されます。web.xml
_ファイルで構成できます。invalidate()
メソッドを使用して明示的に無効化できます。JSESSIONID
について話しているとき、彼らはJavaでセッション追跡を行うために使用されるHTTP Cookieの標準名を参照しています。Javaセッションの チュートリアル を読むことをお勧めします。各ユーザーは、Java Webサーバーがブラウザに送信するため、すべてのユーザーが同じ名前の属性を持つことができ、この属性に格納される値はすべてのユーザーで異なります。
また、WebContextFactoryとWebContextは、サーブレットパラメータを取得する簡単な方法を提供するDWRクラスです。
私が理解しているように、あなたの懸念はHttpSessionに物を保存するときの異なるユーザーの分離についてです。
サーブレットコンテナ(Tomcatなど)は、JSESSIONIDを利用してこれを処理します。
物語はこのようになります:
うまくいけば、(少なくとも部分的に)あなたの質問に答えます。
乾杯
基本的なサーブレットは次のようになります
public class MyServlet{
public doGet(HttpServletRequest req, HttpServletResponse res){
//Parameter true:
// create session if one does not exist. session should never be null
//Parameter false:
// return null if there is no session, used on pages where you want to
// force a user to already have a session or be logged in
//only need to use one of the two getSession() options here.
//Just showing both for this test
HttpSession sess = req.getSession(true);
HttpSession sess2 = req.getSession(false);
//set an Attribute in the request. This can be used to pass new values
//to a forward or to a JSP
req.setAttribute("myVar", "Hello World");
}
}
すでに完了しているセッションの属性名を設定する必要はありません。他の回答で提案されているように、cookieまたはURLの書き換えを使用して、sessionIDを保存してください。
DWR WebContextを処理しているときは、上記と同じことを行っているだけです。通常、Requestオブジェクトはメソッドに渡されないため、WebContextを使用してその要求を取得します。
public class DWRClass {
public doSomething(){
WebContext ctx = WebContextFactory.get();
HttpServletRequest req = ctx.getHttpServletRequest();
HttpSession sess = req.getSession(); //no parameter is the same as passing true
//Lets set another attribute for a forward or JSP to use
ArrayList<Boolean> flags = new ArrayList<Boolean>();
req.setAttribute("listOfNames", flags);
}
}