• 締切済み

Sessionについて

Session管理について以下のページを参考にしました。 http://www.atmarkit.co.jp/fjava/javafaq/session/session04.html あるServletにおいて、(1)セッション開始後、 ( HttpSession session = request.getSession(true);) (2)セッションに値を格納・・・また、違うServletで (3)そのセッションに格納された値を取得・・・ といったやり方が載っていました。 よく、セッション管理についてまだ分かってないところが あるのですが、・・・ たとえば、Aサーブレットでセッションを開始し、 セッションに値を格納・・・・とします。 そのセッションに入れる値。。。というのを 「顧客ID」と「処理CD」の2つにしたい場合はどのような 記述になるのでしょうか?? 参考にしたページには //セッションに値を格納 UserInfo userInfo = new UserInfo(...); session.setAttribute("USER_INFO", userInfo); こんな感じで書いてるんですが、 これは、USER_INFOというキーワードでuserInfoを 値としてセットするということですよね? 顧客IDと処理CDを記述するときは、なにか それぞれオブジェクトが必要なんでしょうか?? よくわかってないです。 ・・・・すみません。よく意味がわかってないので 質問内容も中途半端だと思うのですが、 セッション管理について教えてください。

noname#2205
noname#2205
  • Java
  • 回答数2
  • ありがとう数3

みんなの回答

  • freshjive
  • ベストアンサー率43% (14/32)
回答No.2

※セッションの開始と終了について。 基本的にはログインした際にセッションを開始し、途中ではセッションを開始しない。ログオフするときにセッションを閉じる。という流れだと思います。ただ、ブラウザを使用するので、ボタンを押せばログオフするような仕組みにしてもかならずしもそのボタンを押してもらえるとは限りません。そこで、ある一定時間アクセスがない場合にはセッションを破棄するように設定しましょう。 ご質問のケースでは、最初の画面でsubmitされた際に、そのリクエストを受け取るServletでセッションを開始すればいいと思います。 ※画面遷移の話 画面遷移はわかりますが、それぞれの画面でどういった情報がリクエストパラメータとしてServletに引き継がれるのかがわかりませんね。 Form画面→ユーザ画面 のばあいは登録処理をおこなう。 Form画面→一覧画面→ユーザ画面 の場合は更新または削除処理を行う。 ということですか?

noname#2205
質問者

補足

回答ありがとうございます。 今一つセッションの意味合いとか分かっても 使えてない状態です。 画面遷移は、一覧→ユーザの場合に セッションでパラメータをわたしたかったんです。 フラグで新規か更新とわけて、 更新の場合は一覧で選択したユーザIDも パラメータとしてわたす、ってかんじで。 でもユーザ画面のJSPが、 ユーザ画面Beanを使って値を取得したり してたので、 一覧のServletでユーザBeanを 呼んで値をセットして その後、ユーザJSPをよんでもらう 形、流れにしました。 というわけでセッションはつかえなかったんです。 Servlet->Servletの渡し方が わからなかったので Servlet->JSPでやる方法でやりました。。

  • suigaku
  • ベストアンサー率40% (10/25)
回答No.1

ここが参考になりますよ。

参考URL:
http://www.itboost.co.jp/jserv/jserv_11.php
noname#2205
質問者

お礼

すみません。。。 補足の付け足しです。。 一覧Servletで String kokid = request.getParameter("kokyakuid"); rdo = request.getParameter("syorichk"); //セッション開始 HttpSession session = request.getSession(true); //セッションに値を格納 session.setAttribute("kokyaku_id", kokid); session.setAttribute("syori", chk); という感じで処理させます。 その後、 顧客Servletで //セッションオブジェクトからデータ取得 HttpSession session; if(session == null){ session = request.getSession(true); }else{ session = request.getSession(false); } String kokid = (String)session.getAttribute("kokyaku_id"); String syrchk = (String)session.getAttribute("syori"); などとやる感じですか?? ・・・うーん、結局のところ煮詰まってます。 よろしくお願いします。 また、セッションはどこで始まり、どこでおわらすのが いいのでしょうか?

noname#2205
質問者

補足

ありがとうございます。 新たな質問ですが。。。 やろうとしてることは以下です。 1.Form画面 2.ユーザ画面 3.一覧画面 があり、Form画面からユーザ画面、一覧画面それぞれに 移動できます。 また、一覧画面からユーザ画面へも移動できます。 逆はできません。 要は、ユーザ画面への入り方は、 2種類あるのです。 (1)Form画面→ユーザ画面 (2)一覧画面→ユーザ画面 (1)の場合は、ユーザ画面はクリアの状態ですが、 (2)の場合は、一覧画面で選んだ顧客ID、処理CD をもとにユーザ画面にデータを表示します。 アプレットで同じことをしていたときは、 フラグを使って、上記の(1),(2)を判別 していました。 サーブレットでは、どのように判別すれば いいのでしょうか? これを実現するのには、セッション管理の やり方が必要なのではないでしょうか? そこまでは思い付くのですが、具体的な 方法がいまいち、ぴんとこないのです。

関連するQ&A

  • Sessionについて

    今、JSPを用いてログイン画面を作成しているのですが、Sessionの使い方がいまいちわかりません。 HttpSession ses = request.getSession(); ses.setAttribute("id",id); これでSessionに格納するのはわかりますが Sessionから値を取り出す方法がわかりません。 どなたか助けてください

    • ベストアンサー
    • Java
  • セッションIDの付け替えについて

    はじめまして。 Servlet でセッションIDの付け替えをしたいのですが、 HttpSession session = request.getSession(); out.println(session.getId()); session.invalidate(); HttpSession newSession = request.getSession(true); out.println(newSession.getId()); のように、 一度invalidate()してから、 新しいセッションを取得しても 同じセッションIDとなってしまいます。 違うセッションIDを振るにはどうしたらよいでしょうか。

  • Servlet-JSP のセッション管理

    すいません。 セッションというものを使ってみたいなと思い、 本などを、見よう見真似で下のようなものを作ってみましたが、 まったく動きません。どこがいけませんか? ーーservlet-ー HttpSession session = req.getSession(); if (session.isNew()) {  session.setAttribute("test","ssm3u"); } ーーforwardされるJSP-ー <% HttpSession session = request.getSession(); %> <%= (String)session.getAttribute("test"); %> "ssm3u"と出したいのですが、全然違うのでしょうか? 自分ではCookieを利用するセッション管理を作ったつもりです・・

    • ベストアンサー
    • Java
  • struts2でのフィルターを使ったセッション管理

    はじめまして。 struts2,spring frameworkでソフトを作ってますが、セッション管理について質問があります。 1.ログイン画面で、ログイン後にセッションidを登録する。 session.setAttribute (USER_HANDLE, user); 2.他の画面に移動する時に、セッションid(user)が格納されているか確認する。格納されていない場合は、ログイン画面に戻る。 という処理をする場合、actionごとに HttpSession session = request.getSession (true); Object user = session.getAttribute (USER_HANDLE); if (user != null) { //処理1 return true; } else { //処理2 return false; } と記述すると手間がかかるので、下記の様なFilterでまとめて管理できないかと考えているのですが、こういう考え方は一般的なのでしょうか? public class TestAccessFilter implements Filter { public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) context.get(HTTP_REQUEST); HttpSession session = request.getSession (true); Object user = session.getAttribute (USER_HANDLE); if (user == null) { //処理1 return "login-success"; } else { //処理2 return "login"; } } actionごとにセッションidが格納されているか確認する代わりに、Filterでまとめて確認できないかということなのですが.... struts2でこういう書き方をして良いのかわからず困っています。 アドバイスをお願いいたします。

    • ベストアンサー
    • Java
  • セッション管理

    度々の質問で申し訳ないです…。 「セッション管理」がどうしてもよく分かりません。 書籍やWeb上でいろんな説明を読んで頭では理解したつもりなんですが 実際使う段になるとつまづいてしまいます。 そこで質問です。 html → Servlret1 → JSP1 → Servlet1 → JSP2 → JSP3 このような遷移の中でセッション管理を行いたいと思っています。 今、JSP2までは無事にセッションオブジェクトに保存されたデータを 参照することができていますが、JSP2からJSP3に移るときに nullが渡されてしまうのです。 一度、Servlet1 へ制御を戻さなければだめなのでしょうか? 具体的なコードを以下に掲載します。 よろしくお願いします。 ========= Servlet1 でセッション開始 //セッションを得る HttpSession thisSession = req.getSession(true); //セッションに保存 req.getSession(false).setAttribute("Login","true"); ========= JSP2 で受け取る /* ここではちゃんと"true"が返ってきます。 */ //セッションオブジェクトから取り出す String login = (String)request.getSession(false).getAttribute("Login"); ========= JSP3 で受け取る /* ここで null が帰ってきてしまいます。 String login = (String)request.getSession(false).getAttribute("Login");

  • Javaでのセッションについて

    質問があります。 ServletでSessionを用いるときににまず初めに、 /*セッションの開始*/ HttpSession session = req.getSession(); というふうにすると思います。 ここで、HttpServletRequestのメソッドとしgetSessionがあるわけですが、 セッションというのはリクエストから受け取り開始するものなのですか? 私の解釈では、リクエスト→セッション→コンテキストという順番でスコープが広くなっていると認識しています。 なのになぜ、リクエストからセッションを受け取るのかが疑問でなりません。 また、ブラウザで×ボタンを押すとセッションは終了すると思いますが、 この時にもし、セッション上に明示的に解放しなければならないBeanなどをあげていた場合、 どうやって解放してあげればいいのでしょうか。 たぶん、大きな勘違いをしていると思うのですが、 どなたかご教授願いますでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • Java
  • セキュリティーを確保したセッション管理

    現在、javaにて開発を計画中です。 作成するアプリケーションは、 ログイン画面 ↓ ユーザ、パスワード入力 ↓ 認証(データベースに登録された内容チェック) ↓ ユーザごとに許可されたページへの遷移 といった流れを想定しています。 セッション管理を行なう上で、 Javaでは、「HttpSession」を利用して、   // セッション開始   HttpSession session = request.getSession(true);   // セッションに情報を設定   session.setAttribute("USER_ID" , xxxx);   session.setAttribute("PASSWORD" ,yyyy); といった情報をセッションに保存し、ページ移動時にチェック する事を考えました。 あとCookieを利用する方法も考えましたが、CookieにID、passwordを保存することは セキュリティー上問題あると思います。 セッション管理について説明しているページには、Cookieには、セッションIDを保存し・・・とった 記述があるのをよくみます。 セキュリティー上、Cookieを利用する意味もよく分かっていません。 みなさんは、どのようにセッション管理をされているのか教えてください。 出来るだけセキュリティーを確保したいと思っています。 よろしくお願いします。

    • ベストアンサー
    • Java
  • セッションを使ったint型の値の保持

    こんにちは。 少し文が長いですがよろしくお願いします。 AccessのDBから取得したint型の値を、セッションを使って保持したいのですが while(rs.next()){ String name = rs.getString("NAME"); int value = rs.getInt("VALUE"); HttpSession session1 = req.getSession(true); HttpSession session2 = req.getSession(true); session1.setAttribute("Name", name); session2.setAttribute("Value", value); dispatcher2.include(req, res); } のコードの session2.setAttribute("Value", value); でコンパイルエラー DBAccess.java [37:1] javax.servlet.ServletRequest の setAttribute(java.lang.String,java.lang.Object) は (java.lang.String,int) に適用できません。 がでてうまくいきません。 セッションを使ってint型の値の保持を行うにはどうすればよいのでしょうか?

    • ベストアンサー
    • Java
  • javaサーブレット sessionの使い方

    sessionを使ってデータの受け渡しをしたいのですが、ページ移動が増えると上手く受け渡せ無くて困っています。 jsp→Servlet のみでテストした時は正常に動いたのですが、ページを増やすと値が上手く更新されないのです。 下のプログラムではjspでセッションを開始して、ボタンを押すことでNS1.javaに移動し値を1増やしてNS2.javaに移動します。NS2.javaでも値を1増やしているので結果的に2つ値が増えるはずなのに1つも増えません。 何が悪いのでしょうか。解決策を教えて下さい。 // NStest.jsp <%@ page contentType="text/html;charset=Windows-31J" %> <html> <head> <title>移動</title> </head> <body> <% // isNewメソッドでセッション管理されているか確認します。 if (session.isNew()) { // セッション管理されていない場合、データを登録します。 session.setAttribute("count", 0); // 初回用メッセージ out.println(" Nice to meet you."); } else { // セッション管理されている場合、データを表示します。 out.println("count: " + session.getAttribute("count")); } %> <form method="POST" enctype="multipart/form-data" action="NS1"> <INPUT type="SUBMIT" name="button1" value="移動"> </form> </body> </html> // NS1.java package NStest; import java.io.*; import javax.servlet.*; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class NS1 extends HttpServlet { public void doPost (HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { // 出力形式等の設定 ServletContext context = this.getServletContext(); response.setContentType("text/html;charset=Windows-31J"); PrintWriter out = response.getWriter(); HttpSession session = request.getSession(false); String message; if (null == session) { // nullが返ってくる場合はセッションが作成されていない session.setAttribute("count", 0); out.println("セッションが開始されていません。"); } else { // セッションインスタンスからcountの値を取得して表示 // 1加算してふたたび保存 Integer count = (Integer)session.getAttribute("count"); session.setAttribute("count", 1 + count.intValue()); message = "ページカウント: " + count; out.println(message); } // 処理後はNS2.javaにリダイレクト response.sendRedirect("NS2.java"); } } // NS2.java package NStest; import java.io.*; import javax.servlet.*; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class NS2 extends HttpServlet { public void doPost (HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { // 出力形式等の設定 ServletContext context = this.getServletContext(); response.setContentType("text/html;charset=Windows-31J"); PrintWriter out = response.getWriter(); HttpSession session = request.getSession(false); String message; if (null == session) { // nullが返ってくる場合はセッションが作成されていない session.setAttribute("count", 0); out.println("セッションが開始されていません。"); } else { // セッションインスタンスからcountの値を取得して表示 // 1加算してふたたび保存 Integer count = (Integer)session.getAttribute("count"); session.setAttribute("count", 1 + count.intValue()); message = "ページカウント: " + count; out.println(message); } } }

    • ベストアンサー
    • Java
  • PHPサイトでのセッション情報取得について

    PHPのサイトにて、ユーザーIDをJavaScriptの変数に渡す処理について質問です。 システム会社からユーザーIDが格納されている変数ということで下記の記述を教えていただきました。 「Session::getRegistry('uid')」 そこで、下記のようにjsを設定したのですが、値を取得できません。 <script type="text/javascript"><!-- uid='<? Session::getRegistry('uid'); ?>'; // --></script> 【質問】 1.「Session::getRegistry('uid')」という記述でデータを取得可能なのでしょうか? 2.もし、セッションの「uid」に値が格納されているとした場合、どのように記述したら上記のJavaScriptに値を渡せるでしょうか?

    • 締切済み
    • PHP

専門家に質問してみよう