- PR -

Global_asaxでのセッション情報の使用方法

投稿者投稿内容
未記入
ベテラン
会議室デビュー日: 2008/01/15
投稿数: 65
投稿日時: 2008-03-26 17:50
引用:

ブラウザはa.aspx内のiframeタグを解釈した時点でb.txtの要求を開始するでしょうね。
その時点でセッション情報は通常は確定しているでしょうけど、確実か?というと疑問が多少残ります。
まぁ、b.aspxを用意した時点でセッションがとれている、ということならa.aspxでへんな実装をしなければ大丈夫かも。


a.aspxのPage_Loadでセッション情報を設定しますので、クライアントにa.aspxが返る前には確実に設定されています。

引用:

どうしても拡張子をtxtのままでApplication_AcquireRequestStateイベントでセッション情報を取得したいなら、IISのマッピングの設定を変更し、.txtであってもASP.NET側に処理が渡されるように設定してあげる必要があります。



デフォルトでは駄目だけど設定を変えればいいということですね。
ありがとうございます。
参考になりました。

危うくはまるところでした。

未記入
ベテラン
会議室デビュー日: 2008/01/15
投稿数: 65
投稿日時: 2008-03-26 17:52
もとい・・・

拡張子がtxtやhtmlだとセッション情報を参照できないのでした。
もしかしてこれも設定の問題ですか?
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2008-03-26 18:03
開発サーバ上で、該当するファイルを置いたときでもダメなんでしょうか?
未記入
ベテラン
会議室デビュー日: 2008/01/15
投稿数: 65
投稿日時: 2008-03-26 18:12
引用:

どっとねっとふぁんさんの書き込み (2008-03-26 18:03) より:
開発サーバ上で、該当するファイルを置いたときでもダメなんでしょうか?



txt html を試してみましたが駄目でした。
txt htmlは実際のファイルが存在しなくてもApplication_AcquireRequestStateに飛んでくるのですがセッションの取得はできません。
もしかして、本番サーバーだとマッピングを変えないといけないということから、同じサーバーなのにaspx以外の拡張子は仮想的に別サーバーという扱いになっているのではないでしょうか?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-03-26 18:18
引用:

どっとねっとふぁんさんの書き込み (2008-03-26 17:44) より:
> まずa.aspxがクライアントに返り、クライアントからb.txtを要求するという流れになると思っていたのですが違うのでしょうか?

ブラウザはa.aspx内のiframeタグを解釈した時点でb.txtの要求を開始するでしょうね。
その時点でセッション情報は通常は確定しているでしょうけど、確実か?というと疑問が多少残ります。

aspx を解釈して HTML にレンダリングしたあと、クライアントに戻すのですから、確実では?

よく参照できないと上がっているのは、あるフレームから別のフレームもポストさせて、参照できないとなっているような?
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2008-03-26 18:34
ああ、なんか昔同じような回答したのをだんだん思い出してきた。。。

セッションを利用するには、そのクラスがSystem.Web.SessionState.IRequiresSessionState
を継承している必要があったんでした。
aspx(Pageクラス)ならこれを継承してるんでOKなんですが、txtやhtmlだと無理ですね。

ちなみにtxtでないといけない理由はなんでしょう。
たとえばサイトの管理者はb.txtとして情報を置くけど、a.aspxではb.ashxを呼び出すようにしておいて、b.ashxでb.txtを読み込んで表示、なんて実装ができないことはないので。

#なお、ashxでセッションを利用する場合はSystem.Web.SessionState.IRequiresSessionStateを明示的に継承する必要があります。

> aspx を解釈して HTML にレンダリングしたあと、クライアントに戻すのですから、確実では?

じっくり考えてみたらその通りですね。
なんか最初そこが怪しいとか思っちゃったもので。
未記入
ベテラン
会議室デビュー日: 2008/01/15
投稿数: 65
投稿日時: 2008-03-26 18:44
引用:

ちなみにtxtでないといけない理由はなんでしょう。
たとえばサイトの管理者はb.txtとして情報を置くけど、a.aspxではb.ashxを呼び出すようにしておいて、b.ashxでb.txtを読み込んで表示、なんて実装ができないことはないので。


やりたかったのは似ているのですが、セキュリティ上の問題でブラウザに表示されるURLと違うファイルを見せたかったのです。
その変換をセッション情報で管理しApplication_AcquireRequestStateで処理使用と考えていました。
txtがセッションを扱えないと分かった時点でどっとねっとふぁんさんと同じ解決策しかないだろうなと考えていました。

拡張子をtxtでやりたかったのは元ファイルの拡張子がtxtの時にブラウザにaspx(ashx)の拡張子が表示されると変換しているのがあからさまになるので、なるべくその部分を伏せたかったからです。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-03-26 19:00
引用:
拡張子をtxtでやりたかったのは元ファイルの拡張子がtxtの時にブラウザにaspx(ashx)の拡張子が表示されると変換しているのがあからさまになるので、なるべくその部分を伏せたかったからです。


え?拡張子は、偽るのですよね?

aspx の中で該当のファイルを読み込んで、リテラルに表示させてもいいのでは?

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