- PR -

POSTデータの信頼性について【ASP.NET】

1
投稿者投稿内容
ハニワ祭り
大ベテラン
会議室デビュー日: 2005/11/15
投稿数: 115
投稿日時: 2007-01-20 01:28
お世話になります。

現在下記環境にてWEBシステムの開発を行っています。

・開発環境:Visual Studio .NET 2003
・言語:VB.NET
・クライアント:IE6

単体環境では特に問題は発生しなかったのですが、IISサーバーにモジュールを配置したところ
回線の遅い(回線品質の悪い)ADSL環境のみで、
ブラウザからテキストボックスなどに入力された値が、サーバーに来た際、
ASPのデザイン時に入れておいた値に置き換わるという問題が発生しています。

例として、

<asp:textbox id=text1 runat=server>ABC</asp:textbox>

とデザインナで定義し、Loadイベント内でISPostBack条件でクリアして初回表示しているとします。

ボタンのクリックイベントで、通常はtext1.textからはブラウザから入力した値を取得することができますが、
問題が発生すると、text1.textの値が「ABC」になっています。

サーバー側でエラーチェックしようにも、ABCが実際にブラウザから入力されたものなのか、
デザイン時の初期値がなぜか入ってしまったのか判別できないため、
対処に困っています。


回線の遅いクライアントでしか発生しないため、POSTデータが一部ロストしているのでは
ないかと思うのですが、そもそもPOSTデータの内容は通信経路において
保証されないものなのでしょうか?

また、デザイン時の初期値になってしまうことは、ASP.NETの仕様?或いは欠陥なのでしょうか?


よろしくお願いいたします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-01-20 10:27
TCP/IP の仕様をあたってみたら?
こういう場合、まずはネットワーク上のデータを検査するでしょう。

「POSTデータの信頼性」については、そのあとに語りましょう。
_________________
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2007-01-20 11:29
引用:

ハニワ祭りさんの書き込み (2007-01-20 01:28) より:
例として、

<asp:textbox id=text1 runat=server>ABC</asp:textbox>

とデザインナで定義し、Loadイベント内でISPostBack条件でクリアして初回表示しているとします。


ASP.NET は良く知らないのですが、この「Loadイベント」とは、ブラウザー(クライアント)側のたとえば、
コード:
<body onLoad="foo();">
...
</body>


に相当するものでしょうか?
もしそうだとしたら body のロードが完了しないことは普通にあると考えるべきです。
最後の1バイトの HTTP response をブラウザーが受け取っていなくても、ユーザーはテキストボックスに入力したりボタンを押せたり submit したりできるものです。
もし body のロードの完了まで待たせたいのならば、ロードを確認しなければ submit できないような仕組みを付けるなどをすべきです。もっとも、こういう仕組みのサイトはたまに見かけますが、ユーザーとしては使いにくいものです。

--
unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86}
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-01-20 12:00
引用:

unibonさんの書き込み (2007-01-20 11:29) より:

ASP.NET は良く知らないのですが、この「Loadイベント」とは、ブラウザー(クライアント)側のたとえば、
コード:
<body onLoad="foo();">
...
</body>


に相当するものでしょうか?


違います。
クライアント側ではなく、サーバサイドのイベントです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ハニワ祭り
大ベテラン
会議室デビュー日: 2005/11/15
投稿数: 115
投稿日時: 2007-01-20 12:08
引用:

unibonさんの書き込み (2007-01-20 11:29) より:

ASP.NET は良く知らないのですが、この「Loadイベント」とは、ブラウザー(クライアント)側のたとえば、
コード:
<body onLoad="foo();">
...
</body>


に相当するものでしょうか?




違います。「Loadイベント」と書いたのはサーバー側(ASP.NET)の
Page_Loadイベントのことです。

submit前のロードを確認についてはもう一度確認してみたいと思います。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-01-20 21:19
引用:

ハニワ祭りさんの書き込み (2007-01-20 12:08) より:

submit前のロードを確認についてはもう一度確認してみたいと思います。


まず、送ったものが正しいのか。その検査からした方が良くないですか?
Vigil<impress.co.jp> とか使えば、データは見られるんだし。
_________________
ハニワ祭り
大ベテラン
会議室デビュー日: 2005/11/15
投稿数: 115
投稿日時: 2007-01-22 21:45
とりあえず解決したので報告です。

unibonさんのご指摘のとおり
画面ロードが完了する前にSubmitされていたことが原因でした。

formタグ内のonSubmitで、document.readyState != "complete" の場合、
送信しないようにすることで対応できました。
1

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