現在、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ランキング
-
グローバルIPアドレスの変更タ...
-
Strutsのページングにてoffset...
-
javascriptでセッションを取得
-
エラーページ遷移後に入力値を残す
-
sessionスコープとapplication...
-
ActiveReportのDataSourceについて
-
「<c:forEach タグが終了し...
-
ボタンが活性化の場合とは、ボ...
-
webアプリを作ってます。エラー...
-
リクエストに応じたselectedの...
-
FormのsubmitでFormの内容がnull
-
int型の内容をbyteの配列にコピー
-
フォームで同じ複数のnameで違...
-
Java-jspの画面入力値保持について
-
漏電遮断器の黄色ボタンと白色...
-
フォーム上で押されたボタンに...
-
三菱GOTの画面切り替えについて
-
JSPからJSPへ情報を渡せる?
-
jspからServletを呼び、元のjsp...
-
ある環境のみinputタグが複数あ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
javascriptでセッションを取得
-
グローバルIPアドレスの変更タ...
-
setAttribute getAttribute 配...
-
エラーページ遷移後に入力値を残す
-
sessionスコープとapplication...
-
ASP.NETのGlobal.asaxについて
-
JSPでsession変数が勝手に書き...
-
javascriptでセッションの削除...
-
JSP + ラジオボタン
-
Java/サーブレットでの一般的な...
-
HTMLのSELECTタグの使い方、JSP...
-
JSPで、sessionのタイムアウト...
-
セッションオブジェクトの使い...
-
struts2でのフィルターを使った...
-
セッションタイムアウト時にエ...
-
Strutsのページングにてoffset...
-
カスタムタグを使用してリクエ...
-
struts java ログインのセッシ...
-
セッション維持について
-
VB.net(ASP.net)でアクセスカ...
おすすめ情報