- - PR -
session情報が消える
投稿者 | 投稿内容 | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-08-23 11:57
request.getSession().setAttribute(); でsessionにオブジェクトをセットします。
自動的に次のページへリダイレクトし、 request.getSession().getAttribute(); でsessionからオブジェクトを取得します。 開発環境では、正常にオブジェクトが取得できるのですが、 本番環境では、nullになります。 (ちなみに、リダイレクトする直前では、sessionからオブジェクトを取得できます) 何が起こっているんのか教えていただけないでしょうか? 正常にオブジェクトが取得できるように対処するには、 どのあたりに注視すればよいでしょうか? 開発環境 Windows XP Professional SP2 JDK 1.5.0_06 Tomcat 5.5.9 本番環境 CentOS 4.3 JDK 1.5.0_06 Tomcat 5.5.17 よろしくお願いいたします。 | ||||||||||||||||||||
|
投稿日時: 2006-08-23 12:37
セッション、スコープ、タイムアウトあたりをキーワードに
調べることをお勧めします。 (調査奨励キャンペーン実施中) ハンドル名がファンキーですね | ||||||||||||||||||||
|
投稿日時: 2006-08-23 12:51
普通に考えて、別セッションとして扱われているようですね。
それ以外の動作は、きちんとセッションが維持されて動作しているのでしょうか。 だとすると、リダイレクト時に渡すURLの記述に問題がありそうに思います。 | ||||||||||||||||||||
|
投稿日時: 2006-08-23 13:24
リダイレクトするときに
セッションIDが送られていなさそうですね | ||||||||||||||||||||
|
投稿日時: 2006-08-23 15:19
IEのゾーンの関係で開発系と本番系でセキュリティ設定が違っている、なんて可能性も。
cookieが無効になっててセッションが維持できなかったりします。 | ||||||||||||||||||||
|
投稿日時: 2006-08-23 16:06
皆様、コメントありがとうございます。
いろいろと調べてみましたが、解決に至っておりません。 以下に調査したことを記します。 #ハンドル名は、stonesの超有名曲です。
別セッションとして扱われているようです。 試しにセッションIDを表示してみました。 本番環境 page1: request.getRequestedSessionId(): null page1: request.getSession().getId() : 739DC30E7D859B7EC56777DCD287A03F page2: request.getRequestedSessionId(): null page2: request.getSession().getId() : 187882F798548076E5D82C97F3F79C06 きちんとセッションが維持されていないようで、ページを遷移するたびに セッションIDが変わります。 getRequestedSessionId()の結果が常にnullになるのが気になっています。 開発環境では、同じセッションとして扱われているようです。 開発環境 page1: request.getRequestedSessionId(): 5C1784BA250C8EEAB213A5E9E7EEE1DF page1: request.getSession().getId() : 5C1784BA250C8EEAB213A5E9E7EEE1DF page2: request.getRequestedSessionId(): 5C1784BA250C8EEAB213A5E9E7EEE1DF page2: request.getSession().getId() : 5C1784BA250C8EEAB213A5E9E7EEE1DF リダイレクト時に渡すURLは、 https://.../contactus.html と、訳あってhttps://から書いています。
response.RedirectURL() でセッションIDを付与したURLを生成 しようとしましたが、jsessionid=XXXX は付与されませんでした。 cookieを使用できる環境なので、URLは変化しないようです。
どのあたりの設定を見たらよいでしょうか? 本番系はインターネット上で有効なドメイン名で、開発系はlocalhostです。
cookieは有効で、本番系、開発系へのアクセスは同じクライアントから テストしています。 引き続き、よろしくお願いいたします。 | ||||||||||||||||||||
|
投稿日時: 2006-08-23 16:38
完全にセッションが分かれてしまっていますね。
httpとhttpsが混在している という解釈でよろしいでしょうか。 この場合デフォルトでは 前者のセッションIDと後者のセッションIDは異なります。 セッションIDはcookieで管理されており cookieにsecure属性がある場合 httpsの場合にのみcookieを送信し、 httpの場合はcookieを送信しません。 (https通信を利用する場合tomcatは自動的にsecure属性を付与します) その結果httpsでログインした環境において生成されたセッションIDは その後httpで遷移しているとそのセッションIDが利用されず 毎回別のセッションIDが生み出されると言った結果になります。 結果、セッションオブジェクトで情報を管理することが出来なくなるのです。 では、どうすればいいか、ですが ・・・確かサーバ内部でデータを管理するとか どこかのサイトで読んだんですが ごめんなさい。 思い出せませんです | ||||||||||||||||||||
|
投稿日時: 2006-08-23 16:51
混在していますが、今回のpage1とpage2は、両方httpsです。 いずれにせよ、httpsではセッション管理できないのでしょうか。 今回、最も納得がいかないのは、開発環境と本番環境で違うことです。 開発環境でもhttpsでリダイレクトし、正常に動作します。 で、開発環境と本番環境の違いをよく考えてみました。 開発環境はTomcat単体で動かしていますが、本番環境はApache Httpd とTomcatを連携しています。 このあたりが影響しているのでしょうか。 |