- PR -

セッションIDが変わってしまう。

投稿者投稿内容
元イノキイズム
常連さん
会議室デビュー日: 2005/12/05
投稿数: 24
投稿日時: 2005-12-05 19:39
現在、ASP.NETにて携帯用の開発を行っております。

画面遷移(A.aspx→B.aspx→C.aspx)を行った際にセッションIDが変わってしまい
セッションに格納していた値が取得できずに困っています。
※A.aspxでセッションに格納したものを
 B.aspxとC.aspxのPage_Load()にて、セッションから
 値を取得するロジックを記述しています。
 B.aspxでは取得できるのですが、C.aspxではセッションIDが
 変わっており値を取得できません。
 画面遷移は、Response.Redirect(XXX.aspx);と
 いう風に記述しています。
 動作確認は、3キャリアの実機にて行っています。

携帯ではcookieを利用できないものもあるのでWeb.Configにて
以下を記述しております。
----------------------------------
<sessionState cookieless="true"/>
<httpRuntime useFullyQualifiedRedirectUrl="true"/>
----------------------------------

ご存知の方ご教授お願い致します。


以下は、開発環境です。
----------------------------------
.NET Framework 2.0.50727
ASP.NET 2.0
C#
Windows XP Pro
----------------------------------

以上、宜しくお願いします。
桜緋女
常連さん
会議室デビュー日: 2004/09/15
投稿数: 46
投稿日時: 2005-12-05 20:33
こんにちわ、桜です。
私も最近同様の事象が発生しました。
POSTBACKするだけでもセッションが切れてしまう様子でした。
同様のことが2回あって、以下のような感じでよく原因がわからないまま解決しました。

@ルートディレクトリ以外の場所にソースをコピーし、
 仮想ディレクトリを作成。
 ⇒作成当初からセッションを維持できなかった。
  ルートディレクトリにVisualStudioで新規プロジェクトを作成し、
  そのプロジェクトに既存のファイルを全て追加。
 ⇒正常に動作するようになった。

Aずっと正常に動いていたプロジェクトが、突然POSTBACKのたびにセッションが切断されるように。
 ⇒デバッグ時のURLがlocalhostの変わりに、コンピュータ名になっていることを発見。
 ⇒そういえば、その直前に他のPCから見れるよう、コンピュータ名でアクセスしていた・・・
 ⇒ソリューションから一旦プロジェクトを削除し、localhostを指定して開きなおすが、
  やはりコンピュータ名に変わってしまう。
 ⇒空のソリューションを用意し、既存のWebプロジェクトを追加。
 ⇒正常に動作するようになった。

なんとなく共通点があるような、ないような。
Web.Configを色々確認しましたが、結局関係なかったようでした。
ご参考になれば幸いです。

[ メッセージ編集済み 編集者: 桜緋女 編集日時 2005-12-05 20:35 ]
元イノキイズム
常連さん
会議室デビュー日: 2005/12/05
投稿数: 24
投稿日時: 2005-12-06 10:14
おはようございます。イノキイズムです。
桜緋女さんご返信ありがとうございました。

あれから私の方でもいろいろと調べた結果、画面遷移時に
Response.Redirectさせているのが問題なのではと思い
Server.Transferに変更したところ、無事セッションの値を
取得することが出来るようになりました。

ただし、リンクで別画面へ遷移(別ファイルへ遷移)した際には、まだ当初の問題が
発生しており困っています。
※Commandコントロールで、Format="Link"にすると
 デバイスによってはリンクのように表現されないため
 Linkコントロールでなんとか解決したいのですが…。

もう少し調査しようと思います。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2005-12-06 10:40
こんにちは。

それぞれのページが実は違う Web アプリケーションだった、なんて事はないですよね?

セッションを InProc にしたり、SqlServer にしたりして、現在 SqlServer になっているが、サービスを開始していないとか。(そのときはエラーがでてくれるのかな?)
_________________
囚人のジレンマな日々
元イノキイズム
常連さん
会議室デビュー日: 2005/12/05
投稿数: 24
投稿日時: 2005-12-06 13:12
囚人さんご返信ありがとうございます。
イノキイズムです。

返信が遅くなってしまいました。
すみません。

引用:


それぞれのページが実は違う Web アプリケーションだった、なんて事はないですよね?




 はい、違う Web アプリケーションということはありません。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2005-12-06 14:08
URLにセッションIDを埋め込んで保持する仕組みが、何処かで働かないでしょうね。
IISのアクセスログを見てみるとか。
元イノキイズム
常連さん
会議室デビュー日: 2005/12/05
投稿数: 24
投稿日時: 2005-12-06 22:17
todoさんご返信ありがとうございます。
イノキイズムです。

リンクで別画面へ遷移(別ファイルへ遷移)した際にセッションIDが
変更してしまう問題は以下のようにすることにより解決致しました。

---------------------------------------------------
原因としまして、NavigateUrlプロパティにセットされている
値(URL)がおかしいのだと思い、
NavigateUrlプロパティの値(URL)を
動的(セッションIDを含んだ値)にセットするようにしました。

例)
リンクが存在する画面(A.aspx)のPage_Load()で以下を記述
LinkHoge.NavigateUrl = "~/(S(" + Session.SessionID + "))/B.aspx";

サイトなどでは、セッションIDは"(セッションID)"という風な感じでURLに表示されると
ありましたが、私の環境では"(S(セッションID))"となっていたため上記のようにしました。
※このあたりについて追って調査する必要がありそうです。。。
---------------------------------------------------

とりやえずは解決することができました。

ご返信頂きました皆様ありがとうございました。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2005-12-07 20:09
DoCoMo機種でResponse.Redirectに相対パスを指定した場合の問題
http://www.res-system.com/weblog/item/429/catid/30

useFullyQualifiedRedirectUrlは効いているのでしょうか?

[ メッセージ編集済み 編集者: todo 編集日時 2005-12-07 20:11 ]

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