- PR -

ASP.NET-携帯電話からのセッション利用について

投稿者投稿内容
がんちゃん^^
会議室デビュー日: 2007/02/21
投稿数: 6
投稿日時: 2008-09-22 02:04
ただいまASP.NETにて携帯電話用のサイトを構築しようとしています。
困っているのがセッションの利用なのですが携帯電話からのセッション利用については <sessionState cookieless="true" /> としてcookieを使用しない設定にしているのですがなぜかセッションにデータが保持されずに困っています。
同一ドメイン内に二つのWEBサイトが存在するのですがPC用サイトとモバイル用サイトとして別のWEBサイトとして作成しそれぞれ別のWeb.Configファイルを配置してモバイル用WEBサイトのWeb.Configのみに <sessionState cookieless="true" /> を設定しています。
ちなみにASP.NET2.0でモバイルコントロールを使用せずに通常のウェブサイトとして作成しております。

ASP.NETについての基礎知識が少なく単純ミスなのかもしれませんがこの問題を解決可能な方にお知恵を拝借させて頂ければと思います。

また、もし情報が足りないようでしたらご指摘頂けますでしょうか。
よろしくお願い致します。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2008-09-22 10:15
まず、携帯からアクセスした場合、というかモバイル用のサイトにアクセスしたときにURLにセッションIDが含まれる形式に変換されているかどうか確認してみてください。
それがうまくいってなければ、設定のミスが考えられます。

ちなみに、PC用サイト、モバイル用サイトのトップとなるフォルダにIISの管理ツールでアプリケーションの設定は行われているでしょうか?
sessionStateの設定はWebアプリケーションのトップのレベルのWeb.Configで記述されていないと有効にならなかったと思います。
がんちゃん^^
会議室デビュー日: 2007/02/21
投稿数: 6
投稿日時: 2008-09-22 15:34
どっとねっとふぁん様

URLについては確認済みで(S(〜のような本来含まれないはずの英数字の羅列が含まれています。

IISの管理ツールでアプリケーションの設定との事ですが現在VisualWebDeveloper2005を使用しており、「ファイル」メニューの「新しいWebサイト」で作成されるのがWebアプリケーションと考えてもいいのでしょうか?
「Webアプリケーション」の定義がなかなか調べられずどの単位がWebサイトなのかが分かりません。

同じドメイン内に二つの(「ファイル」メニューの「新しいWebサイトから)Webサイトを作成しそのそれぞれにWebConfigを作成し例えばPC用サイト側のWebConfigに<sessionState cookieless="UseCookies" />と記述するとセッション変数に値が保持され<sessionState cookieless="UseUri" />とすると保持されなくなったので設定は聞いていると思ったのですが。。。

。。。と書いてここで気付いたのですがなぜ<sessionState cookieless="UseUri" />とするとセッション情報が保持されなくなったのでしょうか?
PCからは<sessionState cookieless="UseUri" />は使用できないのでしょうか。

それともう一つ考えたのですが携帯用サイト側でセッション情報を設定、保持するやり方が間違っているのでしょうか?
クッキーを使用できるPC側と同じ形では<sessionState cookieless="UseUri" />と設定した場合では使用できないのでしょうか?

現在、設定、保持の仕方は以下のようにしております。

Sessino("hogehoge") = "テスト"

TextBox.Text = Sessino("hogehoge")
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2008-09-22 16:08
> URLについては確認済みで(S(〜のような本来含まれないはずの英数字の羅列が含まれています。

これなら使えていいはずですけどね。

> 「Webアプリケーション」の定義がなかなか調べられずどの単位がWebサイトなのかが分かりません。

いまのところ、まだVWDで開発している段階なのでしょうか?
とりあえずテストはともかく、このあたりのIISに関する知識がないと実運用環境に置いたとたんに思ったとおりの動きをしなくなると思います。
まずはIISの管理について調べてみることをおすすめします。

> 例えばPC用サイト側のWebConfigに<sessionState cookieless="UseCookies" />と
> 記述するとセッション変数に値が保持され<sessionState cookieless="UseUri" />と
> すると保持されなくなったので設定は聞いていると思ったのですが。。。

これ、保持されなくなること自体おかしいですね。
UseUriの場合、(S(〜のようなURLを利用するようになるだけで、セッション変数の値自体はそのまま利用できないとおかしいです。

何かプログラムでミスってるような気もします。

> Sessino("hogehoge") = "テスト"
> TextBox.Text = Sessino("hogehoge")

SessionをSessinoと記述してるのは掲示板に書き込むときのtypoだとして無視しますが、C#だったら2行目では型があわない(objectをStringに代入しようとしている)のでエラーになるはずですね。
VBだとこれでも通るのかな?


がんちゃん^^
会議室デビュー日: 2007/02/21
投稿数: 6
投稿日時: 2008-09-22 16:27
どっとねっとふぁん様

今回の開発は仕事ではなく自分の勉強と言うか趣味的色合いが強いので自宅にて行っております。
なのでローカルIISではなくホスティングサービスで借りているサーバに対してリモートサイトとしてVisualWebDeveloperを使用しております。
IISの管理の勉強からした方がいいのかもしれないけどとりあえず動かしたかったので知識が足りないにもかかわらず開発を始めてしまいました(;><)

やはりUseUriでも使用できないとおかしいのですね(汗)
ここらへんにヒントがあるような気がしてきました。

それとすいません正しくは以下の通りです。

Session("hogehoge") = "テスト"
TextBox.Text = Session("hogehoge")
もしくは
TextBox.Text = Session("hogehoge").ToString

私のような初心者の分かりづらい質問にも親身にお答え頂き本当にありがとうございます。
でもURLを確認する分には設定には問題ないとの事となのでもう少し調べてみようと思います。

本当にありがとうございます^^
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2008-09-24 10:17
> なのでローカルIISではなくホスティングサービスで借りているサーバに対してリモートサイトとしてVisualWebDeveloperを使用しております。

この場合、特別に設定してもらっているのでなければ、そのサービスのトップのフォルダにたいしてだけWebアプリケーションとして設定されているのではないかと思います。
だとすると、その中の階層で複数のsessionStateの状態を設定することは本来はできないはずです。
http://msdn.microsoft.com/ja-jp/library/h6bb9cz9(VS.80).aspx
ドキュメントの「構成できる場所」にアプリケーションレベルであることが必須になってますから。

開発サーバを利用して、このあたりの設定がどのように動くのかまず十分に調べてみたほうがいいかもしれませんね。

かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2008-09-24 10:28
おそらく外しているけれど念のため。
リンクやリダイレクトの際に http://xxx/hoge.aspx みたいに絶対パスで記述していたりしないですよね。
_________________
かるあ のメモスニペット
がんちゃん^^
会議室デビュー日: 2007/02/21
投稿数: 6
投稿日時: 2008-09-26 00:44
どっとねっとふぁん様
かるあ様

色々ご指摘ありがとうございました。

結果ですがかるあ様のおっしゃる通りリダイレクト処理に絶対パスを使用していた事が原因のようで相対パスにする事により解消できました。

初心者とはいえヘルプにちゃんと目を通せば簡単に分かる事を気付けなかったのがとても恥ずかしいです。

ヘルプには絶対パスを使用している場合はセッションIDの埋め込みを行わないと書いてあったのに実際には埋め込まれていてなおかつセッションが使用できなかった事だけが謎ですが(^-^;

色々とありがとうございました。
とても勉強になりました^^

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