現在、Java初心者ながら、JSP+サーブレットでプログラムを開発中です。
以下のようなHTMLから、それぞれのリンクをクリックすると、サーブレット側では、常に最初にクリックした方のセッション情報を取得してしまいます。
「TANAKA」をクリックしてある値をセッションに保存しますが、そのブラウザを開いた状態(セッションを破棄しないで)次に「SUZUKI」を
クリックすると、やはりセッションにはその値がセットされています。
それぞれのリンク("TANAKA"と"SUZUKI")をクリックした場合に、別のセッションとすることは可能なのでしょうか?
2つのブラウザを同時に表示し、URLのパラメータをに従って別の処理(検索)をしたい思っています。
(リクエストのパラメータは"tanaka"と"suzuki"が正しく取得できます。)
アドバイスを宜しくお願い致します。
▼HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<META http-equiv="Content-Style-Type" content="text/css">
<TITLE></TITLE>
</HEAD>
<FORM>
<BODY>
<TABLE>
<TR>
<a href="http://localhost:8080/abc?name=tanaka" target="_blank">TANAKA</a>
</TR>
<TR>
<a href="http://localhost:8080/abc?name=suzuki" target="_blank">SUZUKI</a>
</TR>
</TABLE>
</FORM>
</BODY>
</HTML>
▼セッション情報を取得しているサーブレット
HttpServletRequest httpReq = (HttpServletRequest) req;
HttpSession session = httpReq.getSession(true);
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
>セッションに設定したパラメータの値が共有されてしまうことに悩んでおります。
なるほど、そういう意味でしたか…
そうなるとサーブレット側で新規にセッションを発行するのは無理だと思います。
御存知かもしれませんが、セッションは以下からセッションIDを取得し、サーバでそのセッションIDを判断し取得します。
・Cookie
・URL
・hidden
通常セッションはCookieからセッションIDを取得しますが、恐らくこれでは複数のセッションIDを設定できません。
そこで、URLにセッションIDを付与してやるとできるかもしれません。(試していないのでわかりませんが・・・)
方法としては
<a href="http://localhost8080/abc?name=tanaka;jsessionid=適当な16進数" target="_blank">TANAKA</a>
ただし、これで成功した場合注意が必要です。
セッションIDが固定されているため、複数のブラウザから同時にTANAKAをクリックし、そのうち1つのブラウザがセッション情報を変更した場合、他のブラウザでもセッション情報が変更されてしまいます。
それが駄目な場合は、あとはAppletなどでブラウザを新規に開かせるぐらいしか思いつきません。
この回答への補足
アドバイス有難うございます。
>通常セッションはCookieからセッションIDを取得しますが、恐らくこれでは複数のセッションIDを設定できません。
>そこで、URLにセッションIDを付与してやるとできるかもしれません。>(試していないのでわかりませんが・・・)
>方法としては
<a href="http://localhost8080/abc?name=tanaka;jsessionid=適当な16進数" target="_blank">TANAKA</a>
調べた限りでは、ブラウザのCookieの設定を無効にしないと、この方法は利用できないとのことでしたが、ユーザ環境ではCookieは無効にすることができません。(他システムで利用が必須のため)
HttpSession session = httpReq.getSession(true);
ここで、強制的に新規sessionオブジェクトを生成できる、もしくは、セッションIDを指定してsessionオブジェクトを生成するなんていう芸当は無理そうですね。
hiddenを使う方法はまだ調べていないので、これから少し調べてみます。
No.1
- 回答日時:
別のセッションにするのではなく、セッションにパラメータを設定してそのパラメータで判断するのではだめなのでしょうか?
HttpServletRequest httpReq = (HttpServletRequest) req;
HttpSession session = httpReq.getSession(true);
session.setAttribute("NAME", req.getParameter("name"));
リンクを押下する度に以上の処理をすれば、セッションにパラメータが設定されます。
取得するときは
String name = (String)session.getAttribute("NAME");
で、設定したパラメータを取得できます。
この回答への補足
返信が遅くなり申し訳ございません。
>別のセッションにするのではなく、セッションにパラメータを設定してそのパラメータで判断するのではだめなのでしょうか?
>HttpServletRequest httpReq = (HttpServletRequest) req;
>HttpSession session = httpReq.getSession(true);
>session.setAttribute("NAME", req.getParameter("name"));
>リンクを押下する度に以上の処理をすれば、セッションにパラメータが設定されます。
セッションに設定したパラメータの値が共有されてしまうことに悩んでおります。
HttpSession session = httpReq.getSession(true);
session.setAttribute("NAME", req.getParameter("name"));
の部分において、"TANAKA"のリンクをクリックした後に、"SUZUKI"のリンクをクリックすると、既にsessionが作成済みと判定され(isNewが
false)、"NAME"の値が上書きされてしまいます。
よって、"TANAKA"リンクと"SUZUKI"リンクから起動したブラウザを同時に表示していると、以降の処理でsessionからデータを取得する際、NAMEの値がいずれも"suzuki"となってしまいます。
HttpSession session = httpReq.getSession(true);
ここで、リンクをクリックするたびに、新規セッションとしてsessionオブジェクトを作成してくれれば、問題ないと思いのですが。
それは無理なのでしょうか。。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- HTML・CSS 私の能力からして間違っていないような気がします。 4 2022/09/30 13:24
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.net(ASP.net)でアクセスカ...
-
セッションに格納する方法
-
リッチクライアントのセッション
-
setAttribute getAttribute 配...
-
グローバルIPアドレスの変更タ...
-
プログラミングで例えばゲーム...
-
腕時計の時報をならないように...
-
C言語で今まで表示していた画面...
-
画面を隠す・消す方法を教えて...
-
jspからjarを参照したいのですが
-
VBAでTIFF画像を読み込むには?
-
javaでクイズ(一問一答)作成...
-
VB.NET DataReaderが開かれている
-
URLはそのままで、リンクをクリ...
-
三菱GOTの画面切り替えについて
-
画面遷移を行わずに同一ページ...
-
このadidasの腕時計の時刻の設...
-
ボタンでパラメータを渡すには
-
3層クライアントサーバとMVCの関係
-
フォーム上で押されたボタンに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
javascriptでセッションを取得
-
グローバルIPアドレスの変更タ...
-
javascriptでセッションの削除...
-
エラーページ遷移後に入力値を残す
-
JSPでsession変数が勝手に書き...
-
ASP Session変数名の取得
-
sessionスコープとapplication...
-
画面遷移でセッション切れにな...
-
ASP.NETのGlobal.asaxについて
-
セッションタイムアウト時にエ...
-
Tomcatでの同一セッション同時...
-
javascriptでのログアウトボタン
-
jsessionidの有効期限を延長す...
-
セッションタイムアウトの設定...
-
setAttribute getAttribute 配...
-
セッションIDの桁数
-
JSPでブラウザ終了時にPostgreS...
-
JSP + ラジオボタン
-
HttpSessionListenerクラスに関...
-
複数Webサーバーでのセッション...
おすすめ情報