
お世話になっています。
JSPを使ってプログラミングをしていますが、画面遷移の途中でsession変数の内容が空になってしまう現象に悩まされています。
画面遷移は、
■入力画面
<jsp:useBean id="apply" scope="session" class="apply.Apply2009Bean" />
↓post
■確認画面(ここで、前の画面で入力された値をsessionに保存)
<jsp:useBean id="apply" scope="session" class="apply.Apply2009Bean" />
↓post
■申し込み完了画面(入力された値をDBに保存)
<jsp:useBean id="apply" scope="session" class="apply.Apply2009Bean" />
ここで、申し込み完了画面になるとapplyという変数の中が全部nullになっています。
念のため暗黙のsession変数からgetId()でセッションIDを画面に出してみると<%=session.getId()%>
申し込み画面:585C94623773F49C0708E050C95E20D2
確認画面:5C35DCF1B68850A762D531CAF2F9700E
完了画面:7D1035FD035C7767C8CEB1D938325D60
と、毎回セッションIDが変わっています。
ちなみに、テスト環境ではこの問題は起こらず、本番環境のみで発生します。
同様の問題を経験したことがあるかたはいらっしゃいませんでしょうか。
構成は
■テスト環境:
os:WindowsXP SP2
server:Tomcat 4.1
Java: 1.4.2
■本番環境:
os:FreeBSD 6.1-RELEASE-p6
server:Tomcat 4.1
Java: 1.4.2
よろしくお願いいたします。
No.4ベストアンサー
- 回答日時:
>私の今までの考えですと、ブラウザからのリクエストがHTTPServletRequestに格納されて、そこに入っているセッションIDがHTTPServetResponseオブジェクト(のどこか)に(自動的に)格納されてブラウザに返り、次のリクエストでまた同じセッションIDが送られてきて……というように、ブラウザを閉じない限りセッションIDは同一のものが使われるのだと思っていました。
>そうではない、ということですね?
そうですね。
時には手動でセッションIDをレスポンス内に明示する必要があります。
そうしないと、その後のアクセスでブラウザはセッションIDを返さないので、Tomcatは新しいセッションIDを再発行する事になります。
> たとえば、そもそもTomcatがCookieを使ったセッション管理をしない設定ならブラウザは関係がなくなります。
>これはつまり、可能性として
>・テスト環境のTomcatは、クッキーを使ったセッション管理を自動的にしてくれるので、今まで動作していた。
>・本番環境のTomcatではそういう設定になっていないため、明示的にセッション管理をしないと、その都度セッションが切れてしまう
>ということが原因という可能性がある、というように考えていいのでしょうか。
そうです。
ちなみに、Contextに、cookies="false"という属性がセットされているならクッキーによるセッション管理は無効化されています。
あと面白いページを見つけました。
こんな問題もあるんですね。参考URLに乗せておきます。
考慮すべき点が色々あって難しいです。
参考URL:http://blog.utils.jp/2008/06/tomcat.html
とてもわかりやすいご回答ありがとうございました。参考URLも役に立ちそうです。
思っていたよりも奥が深そうなので、今回はrequestで回して解決することにします。
これを機会にちょっと勉強してみようと思います。ありがとうございました。
No.3
- 回答日時:
あまり参考にならないかもしれませんが、以前、tomcat@localhost/jspの構成で、Cookieでセッション管理をしている場合に、ブラウザのクッキーを無効にしてもセッションが保持されるという現象に遭遇しました。
このときは、localhost以外のホストからアクセスした場合は、セッションが(予想通り)保持されないことがわかりました。
ひょっとしたら、これがテスト環境と本番環境で挙動が違う原因かも?と思い、一応書き込んでみました。
役に立てなかったらすみません。
あー、なるほど!
そういうことですね。それはありそうです。
かなり以前にも、同様の現象に遭遇したことがありました。
そのときはrequestで振り回して回避したのですが、そういうことなら納得がいきます。
とても参考になりました。ありがとうございました。
No.2
- 回答日時:
すいません一つ誤解を招く表現してました。
「URL」は正確には、「URLへのセッションID埋め込み」です。
>テスト環境と本番環境では同じブラウザを使用しているのでクッキーが原因と言うことは考えにくいんじゃないかと考えています。
>あと、URLなのですが、
>・postで送っていること
>・JSPのsessionスコープを使っていること
>から、URLの引き継ぎは不要ではないかと考えていたのですが、そんなことはないのでしょうか。
>私は、JSPのsessionはその辺を隠蔽して自動的にやってくれるものだとばかり思っていたのですが。。。
その前に、セッションの管理はそもそもどちらの方式で行おうとしているんでしょうか。
Cookieなんでしょうか、URL埋め込みによる方式なんでしょうか?
それによって、調査ポイントは異なってくるし、調査の効率も異なってくると思います。
仮に、URL埋め込みに方式だとして(今回は違う気もしますが)、、、JSPはCookie、URLどちらでも利用できるようになっていますが、Cookieで引き継ぐ場合はともかく、URLにセッションID埋め込みをする場合には、自力で埋め込みをする必要があります。
FormのGETであれPOSTであれ、Aタグであれ自動的なセッションID埋め込みは行われません。
もちろん自動でURLへのセッションパラメータを埋め込んでくれるような便利なタグライブラリを使っているなら話は別です。
このURLに対するセッションID自動埋め込みが行われない理由は知りませんけれども、HTML内のURLに対して自動設定するためには、JavaScriptで動的生成されるURLも考慮する必要があったりして、恐らく自動的な完全なサポートは無理ですので、それが理由なんじゃないかなと想像します。
>・JSPのsessionスコープを使っていること
スコープは変数が保持されているエリアを指定するだけのものです。そして今回の問題は、セッションが継続しないことが問題です。
なので、指定されているからどうということでもないんです。
仮に、Cookieだとして、、、
Cookieもサイトによって、許可する拒否する指定ができるブラウザがあったりもするので、ブラウザが同じというのはこれが問題ないということにはならないと思います。
それに、ブラウザが問題なくてもTomcat側が問題かもしれないです。
たとえば、そもそもTomcatがCookieを使ったセッション管理をしない設定ならブラウザは関係がなくなります。
この回答への補足
ご回答ありがとうございました。
非常に勉強になります。
JSPについて完全に誤解していたことが分かりました。
私の今までの考えですと、ブラウザからのリクエストがHTTPServletRequestに格納されて、そこに入っているセッションIDがHTTPServetResponseオブジェクト(のどこか)に(自動的に)格納されてブラウザに返り、次のリクエストでまた同じセッションIDが送られてきて……というように、ブラウザを閉じない限りセッションIDは同一のものが使われるのだと思っていました。
そうではない、ということですね?
そんなわけですので、セッション管理は明示的にはしていませんでした。そういうことをする必要があるということすら考えていませんでしたので。。。
> たとえば、そもそもTomcatがCookieを使ったセッション管理をしない設定ならブラウザは関係がなくなります。
これはつまり、可能性として
・テスト環境のTomcatは、クッキーを使ったセッション管理を自動的にしてくれるので、今まで動作していた。
・本番環境のTomcatではそういう設定になっていないため、明示的にセッション管理をしないと、その都度セッションが切れてしまう
ということが原因という可能性がある、というように考えていいのでしょうか。
またしても質問になってしまって申し訳ありません。
よろしくお願いいたします。
No.1
- 回答日時:
こんにちわ。
セッションIDの引継ぎは、URLか、Cookieで行われます。
どちらを使用されているかによって、調べるポイントは変わってくるとは思いますが、その周辺を疑ってみたらどうでしょうか。
Cookieによるセッション管理方式なら、ブラウザの設定を見るとか、Cookieヘッダが確かに受け渡されているか、プロトコルヘッダを覗いてみるとか。
この回答への補足
ありがとうございます。
テスト環境と本番環境では同じブラウザを使用しているのでクッキーが原因と言うことは考えにくいんじゃないかと考えています。
あと、URLなのですが、
・postで送っていること
・JSPのsessionスコープを使っていること
から、URLの引き継ぎは不要ではないかと考えていたのですが、そんなことはないのでしょうか。
私は、JSPのsessionはその辺を隠蔽して自動的にやってくれるものだとばかり思っていたのですが。。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP php 確認表示画面で値をSESSIONから取り出す理由の解釈は正しいでしょうか? 1 2023/06/09 17:39
- PHP PHPで入力フォームでデータを確認表示画面まで送る流れを日本語で理解したいのです。 1 2023/05/29 19:12
- PHP php 入力画面から確認表示画面へ情報の受け渡しについて。 1 2023/06/07 18:00
- JavaScript [Java] Edgeでのアドレスバー非表示について 3 2022/04/20 17:51
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- PHP $_SESSIONに渡した後はそのまま使っても問題ありませんか? 3 2022/11/08 22:17
- Chrome(クローム) Chromeで検索するたびにウイルス感染(?)の警告がでます。 どうすれば解決しますか? 5 2023/02/06 14:40
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- PHP sessioncookieをではなくcookieを使わなければならない理由について… 4 2022/11/07 13:01
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
セッションとクッキーに関して
-
リッチクライアントのセッション
-
Webの投票プログラム
-
セッションクッキーの有効期限...
-
フレームの副画面側のページを...
-
antについての質問です
-
jspとservlet、sqlの連携でform...
-
ミキサーの操作
-
管理画面へのアクセス制限
-
Struts2のgetterの挙動、仕様に...
-
IEの開き方を通常に直すソース...
-
腕時計の時報をならないように...
-
ダイアログ内での遷移方法
-
[JavaScript] 正規表現による複...
-
エクセルVBAでホームページの文...
-
javaを使い、jsonデータを取得...
-
GoogleMapでの複数マーカー表示...
-
←戻る → を無効にする方法
-
『ベストアンサーを選ぶ』はど...
-
APIーアプリケーションプログラ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
グローバルIPアドレスの変更タ...
-
javascriptでセッションを取得
-
エラーページ遷移後に入力値を残す
-
JSPでsession変数が勝手に書き...
-
MySQL・Tomcat・JSP 何度もSub...
-
JSP + ラジオボタン
-
セッションタイムアウトの設定...
-
リンクをクリックするとセッシ...
-
ASP.NETのGlobal.asaxについて
-
ログイン後の画面をアドレスバ...
-
sessionスコープとapplication...
-
javascriptでのログアウトボタン
-
HTMLのSELECTタグの使い方、JSP...
-
セッションの情報の消去について
-
ASP Session変数名の取得
-
setAttribute getAttribute 配...
-
CGI::Sessionでのユーザとの紐...
-
画面遷移でセッション切れにな...
-
セッションタイムアウト時にエ...
-
セッションについて。
おすすめ情報