現在、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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
好きなおでんの具材ドラフト会議しましょう
肌寒くなってきて、温かい食べ物がおいしい季節になってきましたね。 みなさんはおでんの具材でひとつ選ぶなら何にしますか? 1番好きなおでんの具材を教えてください。
-
一回も披露したことのない豆知識
あなたの「一回も披露したことのない豆知識」を教えてください。 「そうなんだね」と「確かに披露する場所ないね」で評価します。
-
これ何て呼びますか Part2
あなたのお住いの地域で、これ、何て呼びますか?
-
自分のセンスや笑いの好みに影響を受けた作品を教えて
子どもの頃に読んだ漫画などが その後の笑いの好みや自分自身のユーモアのセンスに影響することがあると思いますが、 「この作品に影響受けてるな~!」というものがあれば教えてください。
-
ギリギリ行けるお一人様のライン
おひとり様需要が増えているというニュースも耳にしますが、 あなたが「ギリギリ一人でも行ける!」という場所や行為を教えてください
-
一つのリンクに複数のURLを指定
HTML・CSS
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
javascriptでセッションを取得
-
HttpSessionListenerクラスに関...
-
Java/サーブレットでの一般的な...
-
aタグによる複数リンクを別セッ...
-
グローバルIPアドレスの変更タ...
-
jsessionidの有効期限を延長す...
-
javascriptでセッションの削除...
-
ASP Session変数名の取得
-
setAttribute getAttribute 配...
-
三菱GOTの画面切り替えについて
-
腕時計の時報をならないように...
-
ボタンが活性化の場合とは、ボ...
-
NetworkStreamからのRead()で、...
-
リクエストに応じたselectedの...
-
C言語で今まで表示していた画面...
-
javaのstrutsを使った画面遷移...
-
Javaプログラミングの質問にな...
-
画面を隠す・消す方法を教えて...
-
VB6 開発環境のエディタに行...
-
jspからServletを呼び、元のjsp...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
グローバルIPアドレスの変更タ...
-
javascriptでセッションを取得
-
sessionスコープとapplication...
-
ASP.NETのGlobal.asaxについて
-
setAttribute getAttribute 配...
-
エラーページ遷移後に入力値を残す
-
JSPでsession変数が勝手に書き...
-
ASP Session変数名の取得
-
Strutsのページングにてoffset...
-
aタグによる複数リンクを別セッ...
-
HttpSessionListenerクラスに関...
-
画面遷移でセッション切れにな...
-
JSPでブラウザ終了時にPostgreS...
-
セッションタイムアウトの設定...
-
「最新の情報に更新」でリクエ...
-
セッション管理におけるクライ...
-
javascriptでセッションの削除...
-
セッションタイムアウト時のペ...
-
セッション変数について
-
GoogleChrome閉じるたびにアン...
おすすめ情報