- ベストアンサー
セッション管理
失礼いたします。 セッション情報の受け渡しを勉強しています。 送り手側で HttpSession ses = request.getSession(); String login = (String)ses.getAttribute("login"); String name = (String)ses.getAttribute("name"); if( !("ttttt".equals( login )) ) { //(以下処理) 受けて側で String name = request.getParameter("user"); String pass = request.getParameter("pass"); HttpSession ses = request.getSession(); if ( name.equals("admin") && pass.equals("hoge")) { ses.setAttribute("login","ttttt"); ses.setAttribute("name",name); out.println("<h3>ログインしました。</h3>"); } とし、セッション管理を行っています。 しかし、今ひとつこの「セッション情報」と普通のパラメーターの受け渡しの違いが分かりません。どちらも文字として次ページへ送っていますので。セッションがずっと保持されるとはソースのどういう所から分かるのでしょうか?漠然とした質問ですが、よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 getParameterで値を取得する場合はフォームよりサブミットされる必要があります。 (getの場合はURLで) セッションは一度値を登録してしまえばセッションが切れるまでは サブミット等のリクエストが無くても情報を取り出すことができます。 ログイン画面よりユーザIDとパスワードを入力しサブミット パラメータで受け取ったユーザIDとパスワードを使用して認証を行い、OKだった場合はセッションにユーザID等のログイン情報を格納 認証が必要なページにてセッションの有無を確認し、ログインしているかしていないかをチェック セッションを使わないと、ユーザIDやパスワードをフォームのhidden項目に埋め込んだりして、 常にクライアントに次へのボタン等でアクションを起こさせる必要があります。 セッションに登録してあれば、そこから値を取るだけなのでフォームのhidden項目等に埋め込むこと、 またボタンを押してもらう等の操作が不必要になります。 ソースのどの部分からというよりは、作り方の問題だと思います。
その他の回答 (1)
そもそも、セッション情報はページをまたがって送るということはしません。 この辺りのことは、Webアプリケーションのシステムを理解していないとなかなか難しいと思います。 パラメータというのは、リクエストのパラメータのことですね。 これは、HTTPのパラメータのことで、 HTTPのメソッドのGETとPUTで若干仕組みが変わりますが、ほぼ同等の意味になります。 これは、ブラウザから送信される情報で、HTTPに載ってサーバーに送られてきます。 HTTPの仕組みを調べてみて下さい。 一方、セッションというのはセッションコンテナによって管理されている領域のようなものです。 セッション情報は、メモリに保持されどこにも渡ったりしません。 request#getSession()メソッドを呼ぶことによって、自分のセッション領域を取得します。 セッション管理を調べてみて下さい。 この辺りのことは、一朝一夕では理解できないと思いますので、色々自分で試してみたりするといいかも知れません。 という私も、これを完全に理解するのに半年もかかりました。
補足
半年かかったというお言葉に勇気付けられました。 ローマは一日にして成らないですよね。 少し考えてみます。 それで分からなかったらまたお願いします。 ありがとうございました。
お礼
>サブミット等のリクエストがなくても 決定的な違いがそこにありました。 ありがとうございます! 最近ちょっと泥沼状態(焦ってます)でして、人に言ってもらわないとそんなことすら気付きませんでした。