• 締切済み

JAVAのセッション変数の上書きについて

JAVAのセッション変数の上書きについて ある画面からセッションに"Data1"というキー名でデータを保存しています。 操作1、画面1で"Data1"をgetし、Data1の中身を変更後、処理の最後にこの"Data1"をセッションに保存 操作2、画面2で画面1の最後に保存したData1を使用して画面表示 操作3、画面2でボタン押下すると再度、Data1を取得して処理を行う。 上記のように別の複数の画面(同一Window)でこの"Data1"を使用するのですが 操作1の処理中(長時間かかる)に画面をCloseして、 まったく関係ない情報に対して画面2を表示すると画面表示時は画面とData1は同期が取れているのですが 操作1の終了後に"Data1"が上書きされてしまい、画面表示内容とセッション変数Data1の内容が 不一致を起こしてしまいます。 なにか良い対策方法がございましたら、ご指導お願い致します。 もうひとつ、session.getAttributeで変数取得後にセッション変数が上書きされた場合 、取得したデータには影響ありませんか?

  • Java
  • 回答数1
  • ありがとう数9

みんなの回答

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

Data1に関して。画面1→画面2と遷移するわけではないのに、画面2では画面1の処理に依存しているってことなのでしょうか。 自分にはちょっとよく分からないですね。。。すみません。 >session.getAttributeで変数取得後にセッション変数が上書きされた場合、取得したデータには影響ありませんか? これは、 String str = "auau"; session.setAttribute("auau", str); String sesStr = (String) session.getAttribute("auau"); str = "auauauau"; System.out.println(sesStr); //この時どうなる? 1 String[] strArray = {"hoge","hogehoge"}; session.setAttribute("hoge", strArray); String[] sesStrArray = (String[]) session.getAttribute("hoge"); strArray[0] = "hogehogehoge"; System.out.println(sesStrArray[0]); //この時どうなる? 2 という意味で合ってますか? 1は"auau"(影響なし)、2は "hogehogehoge"(影響あり)となります。 これはsession云々の話ではなく、単純に値渡しと参照渡しの違いですね。

関連するQ&A

  • IFRAME内PHPのセッション変数取得が出来ない

    既存のHTMLサイトに一部機能追加したいだけ+ブラウザに表示されるURLの関係で、必要部分だけIFRAMEでPHPサーバーのファイルを呼び出して表示させようと考えました。 IFRAMEを記述するHTMLファイル設置サーバーはPHPが使用出来ません。 <iframe src="http://hogehoge/login.php"></iframe> とHTML内にログイン用PHPを表示させ、ボタン押下でログイン判定 →データをセッション変数にセット →header("Location: http://hogehoge/form.php");で画面遷移 →フォーム用PHPに先ほどセットしたセッションデータ表示 とこんな感じの処理がしたいのですが、これがFireFoxだとうまく動くのに、IEだと動いたり動かなかったりします。(動く=開発環境である私のPC、動かない=他全て) ボタン押下で自分自身にPOSTしたデータは正しく受け取って画面遷移まで処理しているのですが、遷移後のページでセッション取得しようとすると取得出来ないようなのです。 IFRAMEを通さず直接URL叩いた場合は、FF・IEどちらも正常に動いています。 session_name('hoge'); session_start(); はPHP先頭に記載してあります。 IFRAMEを使用して外部サーバーのPHPを使用する際に、気をつけねばならない事などがあるのでしょうか… もし解決方法に思い当たる方がいらっしゃいましたら、どうかご回答宜しくお願いいたします。 またもし補足等必要でしたらご指摘下さい。

    • ベストアンサー
    • PHP
  • セッション変数について

    48歳独学でプログラムを勉強しているものです。誰も教えてくれる人がいないので、教えてgooさんには大変お世話になっております。 現在PHPを使用して無料レンタルサーバーに会員画面を作ろうとしているのですが、一般的に無料レンタルサーバーでもセッション変数は使えるものなのでしょうか。どうも上手くセッション変数がフォルダに保存されません。無料レンタルサーバーでは不可なのでしょうか。 セッション保存先に「kaiintmp」というフォルダを作成しています。 そして、 session_start(); session_save_path("kaiintmp"); session_register("simei","pass"); $_SESSION[simei]=$simei; $_SESSION[pass]=$pass; のようにしていますが・・・。 自分のパソコンでは、セッション変数が作成されますがレンタルサーバーにUPしても作成されません。 レンタルサーバーにUPしたときのpathがダメなのでしょうか? レンタルサーバーでセッション変数を使用されている方おりましたら宜しくご教授お願いいたします。

    • ベストアンサー
    • PHP
  • セッション変数について

    セッション変数の扱いについて困っていることがあります。 ichiran.jspの画面(商品一覧表) りんご→nyuryoku.jsp?shohinmei=ringoへのリンク みかん→nyuryoku.jsp?shohinmei=mikanへのリンク nyuryoku.jsp String shohinmei=request.getParameter("shohinmei"); session.setAttribute("shohinmei",shohinmei); ... <form method="post" action="koushin.jsp"> ...入力フォーム </fotm> koushin.jsp HttpSession hs=request.getSession(true); String shohinmei=(String)hs.getAttribute("shohinmei"); データ更新のSQLをかける ichiran.jspの画面で 1.りんごを右クリックして新しいウィンドウで開く 2.みかんを右クリックして新しいウィンドウで開く 3.りんごの入力画面を開いているブラウザのSubmitをクリック ↓ 2の時点でsession変数shohinmeiにmikanが入っているので、 りんごのはずがみかんのほうに更新がかかってしまう。 りんごとみかんの入力画面を並列に開いたときに、 それぞれ別のセッションとして生成され、りんごとみかんに関するshohinmeiの 変数領域が別々に確保されるようにする方法はないものでしょうか?

    • ベストアンサー
    • Java
  • 特定のセッション変数の内容だけ破棄

    $_SESSION['data1'] $_SESSION['data2'] $_SESSION['data3'] $_SESSION['data4']  このようにセッション変数が複数ある場合、session_destroy();を宣言するとすべてのセッション変数の内容が破棄されますが、例えば「$_SESSION['data1']と$_SESSION['data2']だけ」といったように、特定のセッション変数の内容だけを破棄することは出来ますか?

    • ベストアンサー
    • PHP
  • セッション変数にパスワードを保持しても良い?

    ユーザーログイン機能について、取得した全てのDBユーザーテーブル情報を、セッション変数$_SESSION['★★']に格納しているサンプルコードがありました(2つ程見かけました) ■質問 ・セッション変数にパスワードを保持しても良いのでしょうか? ・生成した予測不能な文字列(セッションキー?)が破られたらどうしようもないので、そういう意味ではセッション変数には何を保存しても良いのでしょうか? 単に保存先が、セッション変数かDBかの違いでしかない? ・あるいは、セッション変数には必要最低限なもの、もしくはセキュテリティに関係ないもの、のみ保存して、その都度DBに問い合わせた方が良いのでしょうか? でも、これって非効率的?

    • ベストアンサー
    • PHP
  • セッション変数が表示されない

    ●質問の主旨 セッション変数が表示されないのはなぜでしょうか? ご存知の方、ご教示願います。 ●質問の補足 セッション変数を表示させるために 下記のドットインストールの動画の手順に沿って、 コードの打ち込みやリロードを行っていますが、 "dradra35"という変数は表示されません。 ただ真っ白な画面が出るだけです。 変数を表示させるためには、どうすれば良いのでしょうか? 0:54で紹介されている真っ白な画面のところまでは、 その通りになっています。 ドットインストール PHP入門(応用編) #07 セッションを使ってみよう http://dotinstall.com/lessons/basic_php_advanced/6907 ●開発環境 ・windows8 ・xammp1.8.1 ●コード <?php session_start(); //$_SESSION ['userName']="dradra35"; echo $_SESSION['userName'];

    • ベストアンサー
    • PHP
  • サーバー上の全セッション変数を取得する方法

    お世話になります。 ASPでは、各クライアントで使用する変数をセッション変数に保管することができます。 セッション変数は、サーバーのメモリ上で保管されているというそうです。 サーバー上で、現在保持しているセッション変数を、全て取得(表示)したいのですが、 いろいろ調べましたが、わかりませんでした。 ご存知の方アドバイスいただけないでしょうか? よろしくお願いいたします。 ちなみに、クライアントで、 下記を実行すると、そのクライアントのセッション変数は取得できます。 Dim Key For Each Key in Session.Contents Response.Write Key & "=" & Session.Contents(Key) & "<BR>" Next

  • 画面遷移でセッション切れになります

    いつもお世話になっております。 サーブレットを使用した画面遷移で jsp(ログイン)→servlet(ログイン確認)→jsp(メニュー) →servlet(データ取得)→jsp(データ一覧表示) という流れで画面遷移を行っていたのですが、 二つ目のjsp(メニュー)まではセッションが残っているのですが 次のservletに遷移した瞬間セッションがが切れてしまいnullを検出してしまいます。 はじめのservlet(ログイン確認)にて getAttributeを使用しセッションを残していたのですが、 セッション切れの原因がわかりません。 セッション切れする原因はなんなのでしょうか。 皆様の知恵をお借りできれば幸いです。

    • ベストアンサー
    • Java
  • JavaとJSPのセッションについて

    お世話になります。 ログイン画面(html)→S1→TOP画面(JSP-Frame)→S2→各メニューへ(JSP)の流れのシステムがあります。S1/S2はサーブレット(クラス)です。基本的にログイン画面以外の画面については子画面となっておりウィンドウを新しく生成していきます。 ブラウザ固有の処理、ブラウザメニューからの選択やキー押下などによる各画面間のセッションを管理したいのですが、ここの質問履歴や参考サイトを見てもイマイチ把握できません。 IEのショートカット等ブラウザに依存する部分を使われると対処のしようが無い気もします。(100%対処できれば。。。) システム的にファンクションキー等の操作を禁止(Javascript等)するくらいしか思いつきません。 例として 1.ブラウザのメニューからファイル-新規作成-ウィンドウで新規に画面が開いたとき、ページの有効期限切れの警告画面になるんですが、そこで更新(F5キー押下)で元の画面(本来は出てはいけない画面)になります。 2.URL直打ちやコピーでも普通に画面が表示されます。(これも本来出てはいけない画面) 上記2つの問題に関して、何か対処法はあるでしょうか? 2.に関しては単純にNULLの判定を入れるだけでOKなんでしょうか? あと、ふと疑問に思ったんですが、現在開発しているシステムでは、セッション系を一つのBeans(クラス)にしてセッション管理を行っているんですが、Javaでは一度生成した場合、半永久(意図的に削除やTimeoutを除く)でデータを持つことができますよね? JSPに直接セッションのコードを書き込む場合とBeansとしてもつ場合の違いってありませんか? 前に携わったシステム開発では、JSP側で管理をしてたもので、どうもBeansにセッション情報を持たすことに、???なんですが・・・。 以上、よろしくお願いします。

    • ベストアンサー
    • Java
  • セッション変数にデータをセットする

    下記のPHPプログラムについて 1 <?php 2 // セッションを開始する 3 session_start(); 4 ?> 5 <html> 6 <head> 7 <title>セッション変数にデータをセットする</title> 8 </head> 9 <body> 10 <?php 11 // セッション変数にデータをセットする 12 if (!isset($_SESSION["name"])) { 13  echo "<p>セッション情報をセットしました"; 14  $_SESSION["name"] = "田中"; 15  } 16 echo "<p>名前:".$_SESSION["name"]; 17  18 // セッション変数にデータをセットする 19 if (!isset($HTTP_SESSION_VARS["name2"])) { 20  echo "<p>セッション情報をセットしました"; 21  $HTTP_SESSION_VARS["name2"] = "高橋"; 22 } 23 echo "<p>名前:".$HTTP_SESSION_VARS["name2"]; 24 25 ?> 26 </body> 27 </html> 実行すると 名前:田中 名前:高橋 となるのですが、なぜ13行目、20行目のecho文の内容が出力されないのか不思議です。 echo文の内容が表示がされない理由ついて教えてください。 よろしくお願いします!

    • ベストアンサー
    • PHP

専門家に質問してみよう