• 締切済み

aタグによる複数リンクを別セッションとして扱いたい

現在、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);

  • Java
  • 回答数2
  • ありがとう数0

みんなの回答

  • DMXbw
  • ベストアンサー率66% (4/6)
回答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などでブラウザを新規に開かせるぐらいしか思いつきません。

tayoch
質問者

補足

アドバイス有難うございます。 >通常セッションは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を使う方法はまだ調べていないので、これから少し調べてみます。

  • DMXbw
  • ベストアンサー率66% (4/6)
回答No.1

別のセッションにするのではなく、セッションにパラメータを設定してそのパラメータで判断するのではだめなのでしょうか? HttpServletRequest httpReq = (HttpServletRequest) req; HttpSession session = httpReq.getSession(true); session.setAttribute("NAME", req.getParameter("name")); リンクを押下する度に以上の処理をすれば、セッションにパラメータが設定されます。 取得するときは String name = (String)session.getAttribute("NAME"); で、設定したパラメータを取得できます。

tayoch
質問者

補足

返信が遅くなり申し訳ございません。 >別のセッションにするのではなく、セッションにパラメータを設定してそのパラメータで判断するのではだめなのでしょうか? >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

  • ▲▲METAタグについて▲▲

    HTMLとCSSでHPを作るとき。 METAタグはこれでよいでしょうか?? <meta http-equiv="content-type" content="text/html;charset=shift_jis"> <meta http-equiv="content-style-type" content="text/css">

    • ベストアンサー
    • HTML
  • 新ウィンドウの画像をクリックして閉じる

    画像を載せたホームページを作成しています。 target="_blank"で新ウィンドウで開いた画像をクリックして、新ウィンドウを閉じるにはどうしたら良いのでしょうか? これじゃダメなんでしょうか? <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> <SCRIPT LANGUAGE="JavaScript"> <!-- function WinCls(){ window.close() } //--> </SCRIPT> <TITLE></TITLE> </HEAD> <BODY> <A href="aaa.jpg" javascript:WinCls()" target="_blank"><IMG src="aaa.jpg"></A> </BODY> </HTML>

  • 表示すると文字化けします

    下記のファイルが表示されると文字化けしてエンコードを修正しないとみれませんなぜでしょうか? 日本語EUCになってしまします。 <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <META http-equiv="Content-Style-Type" content="text/css"> <TITLE></TITLE> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> </HEAD> <BODY> <TABLE border="1"> <TBODY> <TR> <TD bgcolor="#ffff00" width="699"><B><FONT size="+2">登録ありがとうございました</FONT></B></TD> </TR> <TR> <TD height="99" width="699"><B>■<A href="http*************************">使いこなすために</A>手順に沿って進んでください</B>→<A href="http**************************">次へ進む</A></TD> </TR> </TBODY> </TABLE> </BODY> </HTML>

    • ベストアンサー
    • HTML
  • $_SESSION['submit']の自動生成

    <form>タグの中にあるsubmitボタンをクリックすると、post先の.phpに、$_SESSION['submit']変数が自動生成されると聞いたので、テストプログラムを作ってみましたが、自動生成されません。 具体的には、test02.phpのprint_r($_SESSION);において、何も表示されません。 つまり、$_SESSION['submit']が作られていません。 詳しい方、ご教授をおねがいします。 test01.phpのソース <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <?php session_start(); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <title>test01</title> </head> <body> <?php print <<< EOH1 <form action="test02.php" method="post" name="form1"> <table> <tr> <td>会社名</td> <td> <input type="text" name="company" size="30" value="東京電気株式会社"> </td> </tr> </table> <br> <input type="submit" value="登録" name="submit">&nbsp;<input type="reset"> </form> EOH1; ?> </body> </html> test02.phpのソース <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <?php session_start(); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <title>test02</title> </head> <body> <?php print_r($_SESSION); if(isset($_SESSION['submit'])) { dispRequest(); } if(isset($_SESSION['submit'])) { unset($_SESSION['submit']); session_unset(); session_write_close(); } function dispRequest() { if (isset($_REQUEST['company'])) { echo "会社名:", $_REQUEST['company'], "<br>\n"; } else { echo "companyが未定義<br>\n"; } } ?> </body> </html>

    • ベストアンサー
    • PHP
  • 下記のタグの中で必要ないのはありますか?

    (1) <?xml version="1.0" encoding="UTF-8"?> (2) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> (3) <html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"> (4) <head> (5) <title>●●●●●●●●</title> (6) <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> (7) <meta http-equiv="Content-Style-Type" content="text/css" /> (8) <meta name="robots" content="INDEX,FOLLOW"> (9) <meta name="description" content="●●●●●●●●"> (10) <meta name="keywords" content="●●●●●●●●"> (11) <meta name="content="●●●●●●●●" /> (12) <meta http-equiv="Content-Script-Type" content="text/javascript"> (13) <meta http-equiv="Content-Style-Type" content="text/css"> (14) <link href="css/A1.css" rel="stylesheet" type="text/css" /> (15) <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">

  • 以下のタグはクリックすると画像が切り替わり、新しいウィンドウでgooト

    以下のタグはクリックすると画像が切り替わり、新しいウィンドウでgooトップへリンクするjavascriptです。 はじめて作ったタグなので無駄なところを教えてください また、同じウィンドウで開くにはどこをいじったらよいですか? <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html><head><title>web page title</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta http-equiv="Content-Language" content="ja"> <script type="text/javascript"> function change(){ document.getElementById("pic").src="2.jpg"; window.open("http://www.goo.ne.jp/");} </script></head> <body> <a href="javascript:change();"><img id="pic" src="1.jpg" alt="gooへリンク"></a> </body></html>

  • httpセッション

    失礼致します。 セッションについてお聞きします。 httpsessionの受け渡しについてなのですが、画面jspページから ログイン名とパスワードを取得し、サーブレットに渡しています。 サーブレットの書き出しは次のようになっています。 public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { HttpSession session3 = req.getSession(true); ・・・ このあとsession3セッションにパスワードをセットし、 jspページでセッションチェックした後falseならログイン画面に リダイレクトします。ここまでは出来ました。 ところが、このログイン名を文字列操作したいと思い、 サーブレットからjspページにディスパッチする前に一旦 文字列操作用javaページで文字列操作をしようと思いました。 ところが、サーブレットでない純粋なjavaページではhttpsessionが使えないことが分かりました。 HttpSessionを型に解決できませんと言われます。 この問題は一度は直面したことのある方も多いのではないかと思い、質問させて頂きました。 このような場合、どのように対処されていますでしょうか?

  • HTMLの中にCGIファイルリンク

    HTMLファイルの中にCGIファイルへのリンクを作りました。 リンクしてCGIファイルも実行してくれましたが、CGIファイルを実行した後、元のHTMLファイルへ戻したいです。 できますでしょうか? 教えてください! お願いします。 ************************** テストとして、下記のファイルを作りました。 HTMLとCGIのファイル ----------------- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML><HEAD> <TITLE>テスト</TITLE> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META content="IBM WebSphere Studio Homepage Builder Version 8.0.0.0 for Windows" name="GENERATOR"> <META http-equiv="Content-Style-Type" content="text/css"> </HEAD> <BODY text=#000000 bgColor=#bbeeee> <H2>テスト</H2> <HR> <FORM> <INPUT type="button" value="計算" onClick="location.href='http://localhost/cgi-bin/test.cgi'" target="_blank style="cursor:hand" title="テスト"> </FORM> <HR> </HTML> ---------------- #!/usr/bin/perl print "Content-Type: text/html\n\n"; `C:/windows/notepad.exe`; -------------

    • ベストアンサー
    • Perl
  • お問い合わせフォーム sessionについて

    自分でお問い合わせフォームを作ってみようと思い、 PHPでちょこちょこと色々なサイトを参考に作成してみています。 なかなか進まず、今つまずいているのが、sessionです。 お問い合わせを書き込んだ画面から確認画面に移行したいのですが、 移行した後の入力情報がうまく表示できません。 <?php session_start(); $check = 1; $em = ""; $name = $_POST["name"]; $mail = $_POST["mail"]; $tel = $_POST["tel"]; $naiyo = $_POST["naiyo"]; //エラーチェック if ($name == "") { $check = 0; $em = "<li>お名前をご記入ください。</li>"; } if ($mail == "" && $tel == "") { $check = 0; $em .= "<li>メールアドレスまたは、電話番号をご記入ください。</li>"; } if ($mail != "") { if (!ereg("[a-zA-Z0-9_.¥-]+@[a-zA-Z0-9_.¥-]+", $mail)) { $check = 0; $em .= "<li>メールアドレスをお確かめください。</li>"; } } if ($naiyo == "") { $check = 0; $em .= "<li>お問い合わせ内容をご記入ください。</li>"; } if (!$check) { $em = "<ul>".$em."</ul>"; } else { $_SESSION["name"] = $name; $_SESSION["mail"] = $mail; $_SESSION["tel"] = tel; $_SESSION["naiyo"]= naiyo; header("Location: confirm.php"); } ?> 確認ページ <?php session_start(); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML> <HEAD> <META name="GENERATOR" content="IBM WebSphere Studio Homepage Builder Version 10.0.0.0 for Windows"> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> <TITLE></TITLE> </HEAD> <BODY> 名前 <?php echo($_SESSION["name"]); ?><br> メールアドレス<?php echo($_SESSION["mail"]); ?><br> </BODY> </HTML> 全くの初心者ですので根本的に分かっておらず、教えがいがないかも 知れませんが...。すみません。よろしくお願いします。

    • ベストアンサー
    • PHP
  • 古いセッションが消えない

    フォームからのデータを受け取るPHP、sesssion.phpが下記のとおりだとします。 <? header('Cache-Control: nostore, no-cache, must-revvalidate'); session_cache_limiter('private_no_expire'); session_start(); header("Content-Type: text/html; charset=EUC"); $http = $_SERVER['HTTP_REFERER']; //どこから来たか $form_id = $_POST['form_id']; $form_pass = $_POST['form_pass']; $flg = $_POST['t']; $session = session_id(); if($http == "http://192.168.1.250/~fukazawa/session/form.html"){ $_SESSION['id'] = $form_id; $_SESSION['pass'] = $form_pass; } $test = $_SESSION['id']; $test1 = $_SESSION['pass']; if($flg == "t"){ echo <<<EOM <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <title> </title> </head> <body> ◎$test<br />$test1 <br><br><br><a href="session.php">test</a><br><br> <a href="session.php?t=test">test2</a> </body> </html> EOM; }else{ echo <<<EOM <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <title> </title> </head> <body> ◎$test<br />$test1 <a href="session.php">test</a><br> <a href="session.php?t=test">test2</a> </body> </html> EOM; } ?> 引数で表示させる内容を異なるようにするPHPファイルです。 仮に一回目にIDを「てすと」、パスワードを「ttt」でログインした場合、session.php・session.php?t=testに表示されるのは、 「◎てすと ttt」 です。 そして、これをいったんログアウトして、今度は ID「二回目」、パスワード「two」でログインすると、 session.phpには 「◎二回目 two 」と表示されますが、 session.php?t=test に飛んだ場合、 一回目のIDとパスワード、つまり 「◎てすと ttt」 が表示されてしまいます。 ブラウザをリロードすると 「◎二回目 two 」 と表示されます。 これは、前のセッションがまだ残ってしまっているということなのでしょうか。 対処法が分からず困っています。

    • ベストアンサー
    • PHP