• ベストアンサー

javascriptでセッションを取得

javaのsession.setAttribute()でセットした値をjavascriptで取得することは可能なのでしょうか? 可能であれば、手法を教えていただければと思います。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

セッションIDの保存はcookieかURLに連結する方法しか有りませんから、 JavaScriptでdocument.cookieや<a href="">を解析するなどしてセッションIDを取得することは可能だと思います。 セッションIDとセッションの値・内容との関連づけはサーバーで行われていますから、 その値を取得するにはAjaxなどで読み込むとかしないと無理だと思います。

shaka001
質問者

お礼

回答ありがとうございます。 cookieを使用する方法で、もう一度調べてみます。

その他の回答 (1)

  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.1

フレームワークやライブラリによって出来るものもあるのかもしれませんが、 基本的にはJavaScriptで直接取得することは出来ません。 ですが、扱いたい値が文字列であらわすことが可能で、クライアント側がJSPなどであれば スクリプトレットや式などで参照するか、formのhiddenを通して取得することは難しくないです。 たとえば、 <% String str = (String) session.getAttribute("hoge"); %> <script type="text/javascript"> alert('<%= str %>'); //alert('<%= (String) session.getAttribute("hoge") %>'); でも同じ </script> とか、 <form name="hogeForm"> <input type="hidden" name="hoge" value="<%= (String) session.getAttribute("hoge") %>" > </form> <script type="text/javascript"> alert(document.forms['hogeForm'].elements['hoge'].value); </script> みたいな感じです。

shaka001
質問者

お礼

回答ありがとうございます。 やはり、直接取得するのはむりですか。 別の方法を検討してみます。

関連するQ&A

  • セッションを使った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
  • SESSIONの取得タイミングについて

    現在簡単な会員登録のサイトを作っているのですが フォームに入力してもらった値を同じ画面でDBに登録するのではなく、 確認画面を新しく起こしてそこで登録ボタンを押せばDBに書き込むようにしたいのですが上手くいきません。 処理の順番は 1.フォームの確認ボタンを押されると値をSESSIONに登録(PHP)  ↓ 2.確認ボタンで新しいWindowをJavaで起こします  ↓ 3.確認画面でSESSIONの値を確認  ↓ 4.SESSIONの値をDBに登録 としたいのですが どうも2.の処理が1.よりも先に入って確認画面にはSESSIONの値が入っていません。 親WindowではSESSIONの値は入っているのですが。 確認ボタンに値の取得と新しいWindowを開くJavaと2つの機能を持たしていることが原因だろうとは思うのですが、 Windowを開くタイミングを遅らせる等の処理でうまく回す方法はありませんでしょうか? (Javaを使ったのはWindowサイズを変更したかったからです。) ご存知の方おられましたらご教授願えないでしょうか。 よろしくお願いします。 環境 レンタルサーバーにてPHP4+MySQL4

    • 締切済み
    • PHP
  • 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を記述するときは、なにか それぞれオブジェクトが必要なんでしょうか?? よくわかってないです。 ・・・・すみません。よく意味がわかってないので 質問内容も中途半端だと思うのですが、 セッション管理について教えてください。

  • 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
  • セッションについて(サーバーサイド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); ---------------------[途中まで]-----------------------------

    • ベストアンサー
    • Java
  • Sessionについて

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

    • ベストアンサー
    • Java
  • セッションオブジェクトの使い方(次画面の渡し方について)

    セッションオブジェクトの渡し方について教えてください。 セッションオブジェクトは、どのタイミングで、次の画面にセッションオブジェクトを渡しているのでしょうか? ▼リクエストオブジェクトを次の画面に渡す場合 request.setAttribute("キー" , 格納したい値); という風に、リクエストオブジェクトの中に値をセットできると思います。 そして、  ・RequestDispatcher rd = request.getRequestDispatcher("画面遷移先URL");  ・rd.foward(request, response); これが実行されたタイミングで、requestオブジェクトに格納した情報を、次の画面に渡していると思いますが ▼セッションオブジェクトを次の画面に渡す場合 いったいどこでセッションオブジェクトを、次の画面に渡しているのでしょうか? セッションの値の入れ方としては session.setAttribute("キー" , 格納したい値); という形でセッションオブジェクトに対して、値を格納しているのだとは思いますが・・・ ここでセットした値を、 どうやって、次の画面にもっていっているのでしょうか? 【不思議に感じているところ】  1.セッションオブジェクトを生成する  2.セッションオブジェクトの中に、値を格納する  3.rd.foward(request, response); で次の画面にリクエストを投げる  4.次の画面で「セッションオブジェクトは飛ばしていない筈なのに、セッションオブジェクトの中には値が格納されている」  うーん・・・  一体どこで、次の画面にセッションオブジェクトを渡しているのでしょうか?

    • ベストアンサー
    • Java
  • セッション属性

    HttpSession 属性に HashMap がバインドされています。 そこで、HttpSession の getAttribute で取得した HashMap オブジェクトで、任意のキーにバインドされている値をgetして、putで入れなおして変更すると、 結局、セッション属性にバインドされている HashMap の値が更新されることになる。 (setAttribute メソッドは使わない) 上記は正しいですか? とりあえず、簡素に質問しました。

  • 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
  • onclickイベントによるsessionへの格納

    いつもお世話になっています。 ご存知の方がいらっしゃったら、ぜひ教えていただけませんか? タイトルの通りなのですが、javascriptのonclickのタイミングで、sessionにデータを格納するということはできるのでしょうか? (session.setAttributeです。) hiddenに入れてrequestでデータを引き渡すことができるのは、わかるのですが、なんとかsessionに入れたいのですが、よろしくお願いします。

    • ベストアンサー
    • Java