- PR -

session情報が消える

投稿者投稿内容
Jumpin'' Jack Flash
大ベテラン
会議室デビュー日: 2006/01/24
投稿数: 198
投稿日時: 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

よろしくお願いいたします。
小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2006-08-23 12:37
セッション、スコープ、タイムアウトあたりをキーワードに
調べることをお勧めします。
(調査奨励キャンペーン実施中)

ハンドル名がファンキーですね
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2006-08-23 12:51
普通に考えて、別セッションとして扱われているようですね。
それ以外の動作は、きちんとセッションが維持されて動作しているのでしょうか。
だとすると、リダイレクト時に渡すURLの記述に問題がありそうに思います。
あすか
ぬし
会議室デビュー日: 2006/07/12
投稿数: 309
投稿日時: 2006-08-23 13:24
リダイレクトするときに
セッションIDが送られていなさそうですね
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2006-08-23 15:19
IEのゾーンの関係で開発系と本番系でセキュリティ設定が違っている、なんて可能性も。
cookieが無効になっててセッションが維持できなかったりします。
Jumpin'' Jack Flash
大ベテラン
会議室デビュー日: 2006/01/24
投稿数: 198
投稿日時: 2006-08-23 16:06
皆様、コメントありがとうございます。

引用:

小僧さんの書き込み (2006-08-23 12:37) より:
セッション、スコープ、タイムアウトあたりをキーワードに
調べることをお勧めします。



いろいろと調べてみましたが、解決に至っておりません。
以下に調査したことを記します。

#ハンドル名は、stonesの超有名曲です。

引用:

ukさんの書き込み (2006-08-23 12:51) より:
普通に考えて、別セッションとして扱われているようですね。
それ以外の動作は、きちんとセッションが維持されて動作しているのでしょうか。
だとすると、リダイレクト時に渡すURLの記述に問題がありそうに思います。



別セッションとして扱われているようです。
試しにセッション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://から書いています。

引用:

あすかさんの書き込み (2006-08-23 13:24) より:
リダイレクトするときに
セッションIDが送られていなさそうですね



response.RedirectURL() でセッションIDを付与したURLを生成
しようとしましたが、jsessionid=XXXX は付与されませんでした。
cookieを使用できる環境なので、URLは変化しないようです。

引用:

nagiseさんの書き込み (2006-08-23 15:19) より:
IEのゾーンの関係で開発系と本番系でセキュリティ設定が違っている、なんて可能性も。



どのあたりの設定を見たらよいでしょうか?

本番系はインターネット上で有効なドメイン名で、開発系はlocalhostです。

引用:

cookieが無効になっててセッションが維持できなかったりします。



cookieは有効で、本番系、開発系へのアクセスは同じクライアントから
テストしています。

引き続き、よろしくお願いいたします。
あすか
ぬし
会議室デビュー日: 2006/07/12
投稿数: 309
投稿日時: 2006-08-23 16:38
引用:
page1: request.getRequestedSessionId(): null
page1: request.getSession().getId() : 739DC30E7D859B7EC56777DCD287A03F

page2: request.getRequestedSessionId(): null
page2: request.getSession().getId() : 187882F798548076E5D82C97F3F79C06



完全にセッションが分かれてしまっていますね。

引用:
リダイレクト時に渡すURLは、
https://.../contactus.html と、訳あってhttps://から書いています。



httpとhttpsが混在している
という解釈でよろしいでしょうか。
この場合デフォルトでは
前者のセッションIDと後者のセッションIDは異なります。

セッションIDはcookieで管理されており
cookieにsecure属性がある場合
httpsの場合にのみcookieを送信し、
httpの場合はcookieを送信しません。
(https通信を利用する場合tomcatは自動的にsecure属性を付与します)

その結果httpsでログインした環境において生成されたセッションIDは
その後httpで遷移しているとそのセッションIDが利用されず
毎回別のセッションIDが生み出されると言った結果になります。
結果、セッションオブジェクトで情報を管理することが出来なくなるのです。

では、どうすればいいか、ですが
・・・確かサーバ内部でデータを管理するとか
どこかのサイトで読んだんですが
ごめんなさい。
思い出せませんです
Jumpin'' Jack Flash
大ベテラン
会議室デビュー日: 2006/01/24
投稿数: 198
投稿日時: 2006-08-23 16:51
引用:

あすかさんの書き込み (2006-08-23 16:38) より:
引用:
リダイレクト時に渡すURLは、
https://.../contactus.html と、訳あってhttps://から書いています。



httpとhttpsが混在している
という解釈でよろしいでしょうか。



混在していますが、今回のpage1とpage2は、両方httpsです。
いずれにせよ、httpsではセッション管理できないのでしょうか。

今回、最も納得がいかないのは、開発環境と本番環境で違うことです。
開発環境でもhttpsでリダイレクトし、正常に動作します。
で、開発環境と本番環境の違いをよく考えてみました。
開発環境はTomcat単体で動かしていますが、本番環境はApache Httpd
とTomcatを連携しています。
このあたりが影響しているのでしょうか。

スキルアップ/キャリアアップ(JOB@IT)