sessionに付けた情報について

このQ&Aのポイント
  • sessionを使ったWEBプログラムにおいて、ブラウザの「戻る」ボタンを押すと古いデータが残り、新しいデータではなく古いデータを元に動作してしまうことがあります。
  • この問題はsessionの使い方によるものであり、解決策は現在見つかっていません。
  • 経験者からのアドバイスや、sessionについて詳しい情報を提供しているサイトを教えていただきたいです。
回答を見る
  • ベストアンサー

sessionに付けた情報について

現在、servletでWEBアプリケーションを作成しているのですが ブラウザで「戻る」をした場合に、sessionに付けて受け渡しした データが残ったまま前画面に戻り、次にアクションを起こした時に 新しいデータではなく、先ほどの古いデータを元にservletが起動して しまいます。  そして、ブラウザの更新ボタンを押すと初めて新しいデータが反映した 画面に遷移するのです。  sessionを使ったWEBプログラムの場合、このようなブラウザの戻るキー による動作不良はついて回るものなのでしょうか?  このバクは私がsessionの使い方の失敗によるものと予想しているのですが 解決策が未だみつかりません。  このような状態になった方の経験から、アドバイスをいたたければ幸いです。 また、sessionについて詳しい情報があるサイトがあれば教えていただきたい。 よろしくお願いします。  

noname#4663
noname#4663

質問者が選んだベストアンサー

  • ベストアンサー
  • MarrowG
  • ベストアンサー率53% (41/76)
回答No.1

ブラウザの戻るボタンやsubmitボタンの二度押しによるトラブルは必ず起こります。 現状ではこれを回避するように実装するという以外に方法はありません。 >ブラウザで「戻る」をした場合に、sessionに付けて受け渡しした >データが残ったまま前画面に戻り、次にアクションを起こした時に >新しいデータではなく、先ほどの古いデータを元にservletが起動して >しまいます。 これはブラウザから送信された情報ではなく、session中に保持されたデータを見にいってるからでは? 戻るボタンの対応の1つとして、ブラウザにも依存しますが、戻るボタンを押して欲しくないページ(servletで生成)では、Expireヘッダを付けておくというのも1つの手です。 IEとかは状況により平気でExpireヘッダを無視してくれたりしますが、絶対にあり得ないぐらい古い日付を付けておけば、再度submitされた場合、必ず新しいデータがservletに渡されてきます。 それともう1つは、servletで生成する各ページにマークをつけておく方法です。 つまり今どのページから遷移してきたかを記録しておく方法です。 これにより、異常な遷移が発生した場合、再入力の画面を出力するなどとするわけです。 他にも方法は考えられますが、取りあえずこんなところで試してみてください。

noname#4663
質問者

お礼

 回答ありがとうございます。とても参考になりました。 もう一度ロジックを見直した結果、基準の情報を表示された ページに持たせてそれを元にsessionに情報をつける ことにしました。  これなら、どこに戻ろうがそこからまたデータを渡す ことができるので上記の現象は出なくなりました。 また、アドバイスをよろしくお願いします。

関連するQ&A

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

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

    • ベストアンサー
    • Java
  • サブウィンドウへのデータの受け渡し方

    はじめまして。 一覧画面から、ボタン押下でサブウィンドウを開き、詳細登録画面を表示するというような、 複数サブウィンドウで構成される webアプリケーションをつくりたいのですが、 実現可能かわからなく、困っています。 (1)サブウィンドウへのデータの受け渡し sessionにユーザ情報やその他のデータを格納して、 サブウィンドウに情報を渡そうと思っていますが、 sessionに格納した情報はサブウィンドウにも引継ぎができますか? sessionのスコープで調べていたのですが、 よくわかりませんでした。 (2)一つのブラウザ上で画面遷移せず、ほとんどサブウィンドウを開いて画面遷移する構成にしています。 こういう構成のwebアプリケーションを今まで見たことがなく、何か問題や弊害があるのではないか? webアプリケーションの構成として間違っていないか?不安です。 ちょっとしたことでもご指摘いただければありがたいです。 よろしくお願いします。

  • sessionスコープとapplicationスコープ

    の違いを教えてください。 sessionスコープ: HTTPセッション間でデータを共有したい場合に使用します。これにより、異なるページ間でブラウザを閉じるまで、もしくは一定時間経過するまでデータを共有することができます。 applicationスコープ: webアプリケーション間でデータを共有したい場合に使用します。webアプリケーション間とは、サーブレットコンテナに設定されるwebアプリケーション内のことを言います。 ではよく分からないのでどちらがより広いのかどういう場合にどっちなのかを具体的に教えてください。

    • ベストアンサー
    • Java
  • Sessionがnullになりません。

    下記の環境でWebアプリケーションを開発しています。 java 1.5 eclipse 3.3 tomcat 5.5 ある画面Aは検索ボタンを押して結果一覧を表示したり、 結果一覧の詳細を知るためにリンクを押して、ポップアップ画面Bを表示したりします。 web.xmlに <session-timeout>10</session-timeout> と記述し、10分でタイムアウトとしています。 Servlet処理の最初で request.getSession(false) によりセッションを取得し、nullであればタイムアウト画面に遷移させています。 結果一覧を表示した後、10分間何もせずに画面Bを表示しようとすると ポップアップの画面はタイムアウト画面で表示されます。 Servletにブレークポイントをつけて確認したところ このときのrequest.getSession(false)の結果はnullでした。 タイムアウト画面を×ボタンで閉じ、A画面内で検索ボタンを押したところ、 request.getSession(false)の結果はnullではありませんでした。 ただし、session内にsetAttributeしていたBeanが全てnullになっており、 その後の処理で例外が発生してしまいました。 なぜ検索ボタンを押したところで sessionがnullになっていないのでしょうか?

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

    Weblogic10.0.3にてWebアプリケーションの 開発を行っていますが、解決しない問題があり 質問させていただきます。 現在、ログイン画面にてユーザーIDとパスワードを 入力してログイン後各処理を行うアプリを開発していますが、 ログイン時のユーザー情報をセッションに保持する作りに していますが、ログイン時にjsessionidがURLに 表示されてしまいます。 (例:http://testserver:9000/TestApp/Test.do;jsessionid=vFqyK3xMrJ9QCLJnW0X0r2w17ylBVhhD2VQT4qGwdMsGvhnZHdJQ!-425034523) 一度ログインするとそのブラウザを閉じるまでは、画面遷移をしても 何度ログイン・ログアウト処理(セッションの生成・削除)を 行っても二度と表示されません。 (画面遷移はStrutsで制御しています) セッションIDをCookieに保持する方法もあるようですが、 なるべくCookieを使いたくないので、セッションに保持するように したいのです。 web.xml、weblogic.xml、Weblogicサーバーの設定などで セッションIDを表示しなくなる方法がありましたら 教えてください。よろしくお願いします。

  • ServletでSessionの一覧を取得

    ServletでSessionの一覧を取得を取得し、 選択したセッションIDを無効するという画面を作成したいと 思っています。 ↓下記URLではServlet API v2.1 以降で廃止されたとあります。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=401&forum=12 しかしながらTomcatの管理画面(Tomcat Webアプリケーションマネージャ ) http://localhost:8080/manager/html の画面ではセッションという項目があってそこをクリックするとまさに やりたかったことが実現されています。 なにか特殊な方法を使用して作成しているのでしょうか。

    • ベストアンサー
    • Java
  • セッション管理

    度々の質問で申し訳ないです…。 「セッション管理」がどうしてもよく分かりません。 書籍やWeb上でいろんな説明を読んで頭では理解したつもりなんですが 実際使う段になるとつまづいてしまいます。 そこで質問です。 html → Servlret1 → JSP1 → Servlet1 → JSP2 → JSP3 このような遷移の中でセッション管理を行いたいと思っています。 今、JSP2までは無事にセッションオブジェクトに保存されたデータを 参照することができていますが、JSP2からJSP3に移るときに nullが渡されてしまうのです。 一度、Servlet1 へ制御を戻さなければだめなのでしょうか? 具体的なコードを以下に掲載します。 よろしくお願いします。 ========= Servlet1 でセッション開始 //セッションを得る HttpSession thisSession = req.getSession(true); //セッションに保存 req.getSession(false).setAttribute("Login","true"); ========= JSP2 で受け取る /* ここではちゃんと"true"が返ってきます。 */ //セッションオブジェクトから取り出す String login = (String)request.getSession(false).getAttribute("Login"); ========= JSP3 で受け取る /* ここで null が帰ってきてしまいます。 String login = (String)request.getSession(false).getAttribute("Login");

  • javaでのセッションについて

    javaでのセッションについてお聞きしたい事があります。 セッションについて下記のページを参考にしました。↓ http://www.atmarkit.co.jp/fjava/javafaq/session/session04.html このページにセッションのタイムアウトについて書いてあったのですが、 その中の文章で 「Webアプリケーションの場合は、ユーザーが処理の途中でブラウザを閉じるということもありますので、必ずしもログアウト処理が行われるとは限りません。このような場合は、クライアント側は処理を終了しているのにもかかわらず、サーバ側にはそのクライアントに対するセッション情報が残ってしまいます」 というのがあったのですが、 自分の作成したwebアプリケーションで セッションを開始した(セッションオブジェクト(HttpSessionインターフェースのオブジェクト)作成)後、明示的に(コーディング上で)セッションを終了していないのに、ブラウザの右上の×ボタンで閉じた後、再びwebアプリケーションで処理を開始すると、セッションオブジェクトがnullになっていました。 ここで、「セッションオブジェクトがnull」=「セッション情報が残っている」と言うのは、間違いでよろしいのでしょうか? 自分は上記の文章で、「セッション情報が残っている」=「セッションオブジェクトがnullでない」と解釈しているのですが。 何か分かる事がありましたら、ご教授お願い致します。

    • ベストアンサー
    • Java
  • 指定のセッションIDのセッションを切る

    1.同一のwebアプリケーション内の違うセッションから指定のセッションIDのセッションを切る。 2.webアプリケーションにサーブレットを作成してもらい、外部からサーブレットにリクエストデータとしてセッションIDを渡して呼び出すと、渡したセッションIDのセッションを切ることができる。 3.サーブレット経由ではなくて指定したセッションIDを外部から切ることができる。 以上、3点について、方法などを教えていただけないでしょうか?

  • JSP内で、アクションによってセッションをクリアする方法

    はじめまして。 Java(struts)とJavaScriptを使用し、プログラムを作成しています。 サーバー側の処理で、セッション領域に必要な情報をセットし、その情報を画面表示の際に使用しています。 ひとつの画面から、複数のアクションを飛ばす画面で それぞれは、JavaScriptによって分岐しアクションを選択する形になっています。 表示された画面から、指定したアクション以外のアクションで、別の画面に遷移しようとした際に、 セッション領域をクリアする処理が必要なため、色々と探しているんですが、なかなか思うように情報が集まりません。 JavaScriptでセッションを操作する。 又は、指定された画面以外に遷移する場合に、 セッション内容をクリアする方法、どうかご教授お願いいたします。 環境: Java1.4.2_09 struts 1.2.7 tomcat 4.1.33

    • ベストアンサー
    • Java

専門家に質問してみよう