トップページ⇒php
1001コメント438KB

【質問】ASP.NETスレ Part5【議論】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/01/23(金) 09:46:51ID:???
●過去ログ
Part1 - 【質問】 ASP.NETスレ 【議論】
http://pc5.2ch.net/php/kako/1040/10406/1040698263.html
【質問】ASP.NETスレ Part2【議論】
http://pc8.2ch.net/test/read.cgi/php/1111480331/
【質問】ASP.NETスレ Part3【議論】
http://pc11.2ch.net/test/read.cgi/php/1160355849/
【質問】ASP.NETスレ Part4【議論】
http://pc11.2ch.net/test/read.cgi/php/1184683786/ (dat落ち?)

あんまり需要ないのかもしれませんが。。。
0232nobodyさん2009/05/08(金) 01:55:36ID:???
ソースをうぷしれ
0233nobodyさん2009/05/08(金) 12:01:02ID:???
>>231
UserControl1.Findcontrol("Label1").text = "hage"
//キャスト省略
0234nobodyさん2009/05/08(金) 18:05:34ID:???
>>233は教えてあげる目的でそういう記述してくれてると思うけど、
実際にはLabelオブジェクトをプロパティで公開するか
Label.Textを公開してあげればいいんじゃないかと思われる
02352312009/05/09(土) 00:26:29ID:???
ごめんなさい、非常に強い睡魔で寝てしまいました
>>232-234
俺の勘違いでイベント発生してないだけでした
本当にバカでした
0236nobodyさん2009/05/09(土) 09:51:49ID:???
(#^ω^)…
0237nobodyさん2009/05/09(土) 13:10:10ID:???
それでもlabelobjectがnullな状態ってのがよくわかんないね
0238nobodyさん2009/05/09(土) 23:37:56ID:???
くっそー
いままでprototypeだったけどjquery結構便利だな
なんか和んだ( ´ー`)フゥー...
0239 [―{}@{}@{}-] nobodyさん2009/05/11(月) 09:16:40ID:???
>>238
VS2008SP1からだったか、jqueryは標準サポートだしな
0240nobodyさん2009/05/12(火) 00:01:12ID:???
VS2005でなんとかしてjQuery使えないかな
IntelliSenseは無くてもいいから
02411632009/05/12(火) 01:28:31ID:???
>>204の続きです。
以下のイベントログが出力されており、
AppPoolが再起動している為、
セッション情報が消えてるぽいです。
クラッシュダンプで調べるしかないでしょうか?
他に調査方法があればご教授お願い致します。

・イベントログ
アプリケーション プール 'xxx' を提供しているプロセスは、
World Wide Web 発行サービスで致命的な通信エラーを検出しました。
イベントID 1011
0242nobodyさん2009/05/12(火) 01:37:48ID:???
>>240
普通にJQueryいれりゃいんじゃないか?
0243nobodyさん2009/05/12(火) 05:14:26ID:U71Iyk1V
旧ASPでPDFファイルを作成したいのですが、どんな方法があるでしょうか。
PDFは表形式で、グリッドの高さは可変で、行の途中にページの境目が来る
ようならその行の前に改ページしなくてはなりません。
サーバー側の処理でPDFファイル化したいです。
よろしくお願いします。
0244nobodyさん2009/05/12(火) 06:58:22ID:???
安心したまえ。PDFだってテキスト直うちで書けるんだ。
つまり、FileSystemObjectでテキストファイルを生成して、
後はPDFの仕様通り文字列を吐き出せばいいだけだよ。簡単でしょ。

マジレスすると、無理だから別途そういうパッケージソフトを買う。
ビジネスソフト板で帳票作成ソフトというと、まぁ数は限られるから調べてみるといい。
0245 [―{}@{}@{}-] nobodyさん2009/05/12(火) 09:09:04ID:???
>>241
本質的な解決ではないけど、session維持したいなら
stateserverモードを使うとかどうよ?
0246nobodyさん2009/05/12(火) 10:47:32ID:???
ClassicASPでPDFって言うと何があるのかね
ASP.NETならActiveReport一押しなんだけど
02472432009/05/12(火) 11:35:40ID:U71Iyk1V
>>246
ActiveReportって定型のフォーマットしかできないイメージなんですが、
グリッドの高さ変えたりページはみだす前に改行したりできますか?

0248nobodyさん2009/05/12(火) 12:00:02ID:???
>>247
フリーハンドで描画できるだろ。
0249nobodyさん2009/05/12(火) 12:03:03ID:???
>>247
CanGrowとかCanShrinkとか
まぁ・・・簡単な動的〜FORMATイベントとか駆使して複雑な動的ってのもできるっちゃぁ出来ると思うけど

たいがいの案件はこなせてきた

一回体験ばん入れて使ってみればどうかな?
02502492009/05/12(火) 12:03:47ID:???
だめだ・・・日本語が支離滅裂だ…
疲れてんのかな・・・
0251nobodyさん2009/05/12(火) 13:08:49ID:???
>>247
>グリッドの高さ変えたりページはみだす前に改行したりできますか?
設計が悪いだけじゃない?
改行したら自動的に2行分に伸長してくれて描画してくれるとか余裕だと思うけど

おおよその要求には応えてくれたけど、できないこともあるかもしれない
例えば1行に記述できず2行に伸長してくれたとき、
それがページの最下行だったら改ページして次ページの最上行にしてくれるとか、
もしくはそのまま印刷してくれるを選択できるとか、フッターの表示の関係とか。

グリッドの高さについては、サンプルのCreating and Modifying Report Layouts at Run Time
にあるように実行時調整してしまえば、可能と思われる(英語版ですまん)

>The format event allows the properties of report sections and controls
>to be modified including height, visibility, and other visual properties.
//フォーマットイベントでは、レポートセクションやコントロールの高さや表示/非表示などを含む
//表示に関するプロパティを変更することができる
0252nobodyさん2009/05/12(火) 13:13:33ID:???
↑
すまん上の「できない例」は想像の話。
グループヘッダーとか、レポートのフッターの改行とか伸長とか、改ページごとに表示するとかは
帳票によってクセがあったり得手不得手があるもんなので、試してみるしかないね。
0253nobodyさん2009/05/12(火) 13:26:34ID:???
>>251
ActiveReportsならASP.NETのも基本的に変わらないけど

>改行したら自動的に2行分に伸長してくれて描画してくれるとか余裕
CanGrowプロパティだったかな? で伸縮させるように出来る

>それがページの最下行だったら改ページして次ページの最上行にしてくれるとか、
>もしくはそのまま印刷してくれるを選択できるとか
プロパティいじるだけでそうなるはず。
KeepTogetherかなんか忘れたけど

高さ操作は処理中にしようと思うと基本的にFormatイベントでのみしか推奨されていないけどいける

中途半端な知識なんで勘違い多いかも知れんが
0254nobodyさん2009/05/13(水) 10:29:56ID:???
CustomValidatorを継承したコントロールを作ったんだけど、
ページ内のValidationSummaryがErrorMessageを拾ってくれない。
isValidやErrorMessageは正しくセットされていることは確認した。
カスタムコントロールのは拾ってくれないのかな?
0255nobodyさん2009/05/13(水) 11:41:36ID:???
継承って文字通り継承?
それともユーザコントロール?
0256nobodyさん2009/05/13(水) 13:01:18ID:???
文字通りの継承。
検証失敗時にTextが表示されるし、
ValidationGroupも検知して検証してくれている。
ただ、なぜかValidationSummaryに反映されない。
もちろんPage.IsValidもfalseになってる。
0257nobodyさん2009/05/13(水) 14:31:56ID:???
Page.GetValidators()を調べてみたんだが、
単にメンバに持ってるValidatorCollentionをsingletonで返してるだけなんだな
どうやってValidatorCollentionにValidator(BaseValidator)をaddしてるのかよくわからん
ValidatorCollentionの中身も単なるIEnumerableを実装したリストクラスに見えるし
0258sage2009/05/13(水) 15:35:29ID:???
チラ裏
今更ながらIIS+ASP.NET+SQLiteでゴニョゴニョしてみたけど、手軽で良いわこれ。
要IIS(monoっつー手もあるけど保留)な点さえクリア出来るなら、ちょっとしたページ作成なら
これでいいや。
0259nobodyさん2009/05/13(水) 15:38:24ID:???
オレもこれやりたくてmono入れようとしてるけどSolarisだときっついな
まあ時間取れるまでWinサーバ使うか・・・
0260nobodyさん2009/05/13(水) 19:23:50ID:EB+s12M/
.NET Framework 3.0のPage.PreviousPage.FindControlについて教えてください。
トップページにある「発言ボックス」に入力した文字列を、表示ページにて表示したいのですが
テキストボックスを参照できなくて困っています。

マスターテンプレート(Template.master)
 ┗トップページ (Default.aspx)
    ┗ユーザコントロール(Hatsugen.ascx ID=hatsu)
       ・テキストボックス コントロール(ID=moshi)
       ・ボタン コントロール(botan)

マスターテンプレート(Template.master)
 ┗表示ページ (showhatsugen.aspx)

という2つのページ(階層)があるのですが、トップページ側のボタンコントロールで
PostBackUrl="showhatsugen.aspx" としています。
showhatsugen.aspx側で、@ITの記事を参考にテキストボックス(moshi)を参照しているのですが
nullが返ってきてしまいます。

■試したこと
�@@ITの記事のまんま試してみた。
TextBox a = (TextBox)Page.PreviousPage.FindControl("moshi");

�Aユーザコントロールも参照しないとだめかもと試してみた。
TextBox a = (TextBox)Page.PreviousPage.FindControl("hatsu").FindControl("moshi");

�Bテンプレートもいれないとだめかもと思って試してみた。
TextBox a = (TextBox)Page.PreviousPage.Master.FindControl("hatsu").FindControl("moshi");

上記のような階層の場合、どのように値を参照できるか教えてください。

■参考にした@ITの記事
ttp://www.atmarkit.co.jp/fdotnet/dotnettips/406asppostback1/asppostback1.html
0261nobodyさん2009/05/13(水) 19:37:56ID:EB+s12M/
あ、できました。�Bで。
0262nobodyさん2009/05/13(水) 19:45:55ID:???
PostBackは原則的に同一ページにするのが望ましいというのはわかってて、
あえてそれをやってるんだよね?
0263nobodyさん2009/05/13(水) 20:05:04ID:???
はぁ? 馬鹿じゃね。しねよ
0264nobodyさん2009/05/13(水) 20:21:45ID:???
そこらの本読むとPostbackUrlやServer.Transferの方が
Response.Redirectよりよく思えるんだよな。
いやまぁ実際メリットもあるけど。
0265nobodyさん2009/05/13(水) 22:50:11ID:???
ASP.NET MVCのほうが良いよ。
0266nobodyさん2009/05/13(水) 23:01:05ID:???
PostbackUrlが良いと言ってるやつは実践してみてないやつ。
ASP.NETの各種仕組みと相性が悪い。

Server.Transferはいいんだけど。URLが紛らわしくなるため敬遠されることが多い。
0267nobodyさん2009/05/13(水) 23:49:01ID:???
一つの画面に収まる機能は一つのページに記述して
異なるページに遷移するときはsessionだのcookieだの使用したほうがわかりやすいよね
asp.netの場合は1ページが1クラスだから、
クラス内の処理は、なるべくクラス内に責任もって記述してあげるのが
オブジェクト指向の観点からもわかりやすい気がする

各ページのクラスにCookieやSessionを扱う、
ICookieや、ISessionみたいなインターフェースを実装して、
Serializableなデータを保持するクラスを、
ページ間でやりとりできるようにしたら面白いのになと思ったり。
0268nobodyさん2009/05/14(木) 00:02:25ID:???
>>267
うちはページ継承してベースページを作成して
各機能ページはそれを継承して処理ってる

セッション管理とかログインしているいないとかのチェックはベースページ側でやってたり

インターフェイスもいいけどなんか使いどころが難しくってさ・・・
各ページで実装もセにゃいかんし
レベルが低いだけだとは思うが
0269nobodyさん2009/05/14(木) 00:15:25ID:???
やたらとインターフェイス使いたがるのもどうかしてる
0270sage2009/05/14(木) 11:53:07ID:W6V8lEeJ
はじめまして。
現在vs2008、.NET FrameWork3.5にてASPのシステムを作成しています。

セッションが切れた場合の処理としてテストしているのですが
global.asaxでsession_startでセッションが切れた場合にエラー画面へ
リダイレクトする処理を入れているのですが
そこを通った後またsession_startに来てしまいリダイレクトしてくれません。
ログをみてもその関数が終わったらすぐにその関数というようになっています。

原因を知っている方お願いいたします。

If Me.Request.RawUrl.IndexOf("XXX.aspx") < 0 Then
If Session("UserId") = "" Then
Response.Redirect("http://XXXXX/ERRGAMEN.aspx")
End If
End If

0271nobodyさん2009/05/14(木) 12:33:07ID:???
これかな?
エラーページにResponse.Redirectで遷移すると
設定したSessionが消えてしまうことがあるらしい
ttp://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=10653&forum=7

ログやそれに似た用途ならglobal.asaxでもいいけど
認証ならフォルダごとにWeb.configでやったほうがいいかも
02722702009/05/14(木) 13:26:27ID:???
>>271
的確なアドバイスありがとうございます。
リダイレクトをtransferにすることで対処できました。
0273nobodyさん2009/05/14(木) 15:08:04ID:???
ここASP.NETだけど・・・
0274nobodyさん2009/05/14(木) 15:18:31ID:???
WebフォームにCalendarコントロールを貼って
・日付が変更される毎にカウンターCcountを1増加させて表示(Label1)
・選択されたカレンダーの日付を表示(Label2)
・PageLoadされる毎にカウンターPcountを1増加させて表示(Label3)
させたい。

Partial Class _Default Inherits System.Web.UI.Page
 Public Shared Pcount As Integer
 Private Ccount As Integer

 Protected Sub Calendar1_SelectionChanged(ByVal sender As Object, ByVal e As _
 System.EventArgs) Handles Calendar1.SelectionChanged
  Ccount = Ccount + 1
  Label1.Text = Ccount.ToString 'Calendarの日付が変更された回数を表示

  'カレンダーの日付を選択したら、カレンダーの値を表示する
  Label2.Text = Calendar1.SelectedDate.ToShortDateString
 End Sub

 Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
 Handles Me.Load
  Pcount = Pcount + 1
  Label3.Text = Pcount.ToString 'PageLoadされた回数を表示
 End Sub

End Class

カウンターの定義で、上記のように Public Shared ではなく Private にすると
数値が初回+1しただけで、それ以上増分されません。
何がいけないのでしょうか?
0275nobodyさん2009/05/14(木) 15:38:57ID:???
>>274
public shared PcountはASP.NET全体で利用するアプリケーション変数(グローバル変数)的なものだったと思う
privateにすると、そのPageのメンバ変数になるので、ポストバックすると新しいPageのインスタンスが生成されるから、
Pcountも新しいインスタンスの異なるメンバ変数扱いになってポストバック前のデータを保持しない

そう考えるとpublic sharedは便利と思うかもしれないけど、
複数の人が同時にそのページを利用すると、使用した人の数だけPcount++されてしまって
思ったような動作はしないと思うよ
Aさんが日付選択→Pcount → 1
Bさんが日付選択→Pcount → 2
Aさんが日付選択→Pcount → 3 
Aさん2回目の使用でPcount==2のはずなのに途中でBさん使ったのでなぜかPcount==3

なんでPcountの値をセッションやクッキー、ViewStateに保存して
Page_Loadで復元するような処理を書く必要がある
この場合同じページへのPostBackだしセキュリティにも大きな影響を与えなさそうなので、
ViewStateがいいと思う
0276nobodyさん2009/05/14(木) 16:02:31ID:???
早速のレスありがとうございます。

>privateにすると、そのPageのメンバ変数になるので、
>ポストバックすると新しいPageのインスタンスが生成されるから、
>Pcountも新しいインスタンスの異なるメンバ変数扱いになって
>ポストバック前のデータを保持しない

ということですね、理解しました。

データの保持の違いとか、処理タイミングとか、実行順とかまだ整理できて無くて
そのために簡単なサンプルフォームを作って、カウンター表示を仕込んで試しているのですが
条件が変わると自分の狙った内容と実行結果が違ってたりして、・・・頑張ります!
0277nobodyさん2009/05/15(金) 19:06:29ID:???
Web開発の初期に、よくはまる道だ
がんばれ
0278nobodyさん2009/05/15(金) 21:06:17ID:???
JavaScriptで好き勝手やって、ViewStateの内容と
同期しなくなるとか昔はまったな。
挙句、不正な操作扱いされたりとか。
0279nobodyさん2009/05/15(金) 21:07:23ID:???
肝心なのはPublicかPrivateかじゃなくて
Sharedかそうじゃないかなんだが、大丈夫か
0280nobodyさん2009/05/16(土) 00:33:16ID:???
最近VB.NETでのレスをよく見かけるが、実業務のasp.netでもVBって多いのか?
言語の優劣を語る気はないがなんとなく気になったC#使い。
0281nobodyさん2009/05/16(土) 02:18:45ID:???
もともとのASPがVBだから、その流れでVBが多いんじゃない?
業務系もVB6の流れを汲むところは、今でもVB.NETが多いし

新しい言語に切り替えるって難しいよね
新しいテクノロジに理解があるところばかりじゃないし
過去の資産に縛られたりして
0282nobodyさん2009/05/16(土) 03:21:32ID:???
で旧VBで下手に培われてしまった悪しき習慣が.NETにも浸食するんだぜ。
VBの頃はネットが普及したせいで、ばかみたいなコードや習慣が広がりすぎた。
でその悪しき習慣をASP.NETとかにまでそのまま持ってくるもんだからとんでもないことに。
0283nobodyさん2009/05/16(土) 03:24:32ID:???
>>280
俺はC#だ
VBなんて見ただけで寒気がする
0284nobodyさん2009/05/16(土) 04:40:23ID:???
質問
1.Global.asaxはシングルトンか?
2.Global.asaxにインスタンス変数を定義して、HttpContextのようにリクエストに関する情報を保持するのは問題ないか?
3.BeginRequestイベントとHTTPハンドラ(ページインスタンスなど)は常に同一スレッドで実行されるか?
4.ViewStateUserKeyはCSRF対策に利用できるか?
5.Global.asaxにインスタンス変数を定義して、グローバル変数として使えるか?
6.汎用ハンドラ(ashx)でIsReusableがtrueを返すように実装すると、そのハンドラは基本的に再利用されるものと期待できるか?
7.グローバル変数が必要な時Applicationオブジェクトを定義するのは望ましい方法か?
8.サーバを分散していない場合、ApplicationオブジェクトはそのWebアプリケーション内で完全に一つとみなしてよいか?
9.ViewStateは基本的に改ざん防止策がほどこさえているので、ViewStateの値は基本的に信用してよいか?
10.Webガーデンを使用していないのに、そのアプリケーションプール用のワーカープロセスが複数同時に動作することはあり得るか?
11.認証チケットはデフォルトで暗号化されているため、HTTPSでなくても安全か?
12.フォーム認証でログアウトすると、その認証チケットでは二度とアクセスできなくなるか?
13.SQLインジェクションは、Webアプリケーション特有の脆弱性か?
02852842009/05/16(土) 12:15:07ID:???
ちなみに俺はリアルモンク属性だからはやく答えないと病院食を食うことになる
0286nobodyさん2009/05/16(土) 12:23:16ID:???
自分で調べろって感じだな
02872842009/05/16(土) 12:36:25ID:???
実は理解度クイズだよ。
正答率は自称詳しい人でも結構低かったりもする。

>>285誰だよおまえはw
02882842009/05/16(土) 12:38:15ID:???
とでも書けば、誰かが答えてくれるに違いない
0289nobodyさん2009/05/16(土) 12:44:04ID:???
いやいやクイズという限り、いつか出題者が回答するから問題ない
0290nobodyさん2009/05/16(土) 12:46:21ID:???
まあ言われてみれば誤解さえれそうだが、ほんとにクイズだよ。
俺がさっきちょっと考えてみただけの。
テストや宿題じゃなくて(っていうか中身見りゃわかるだろうけど、そういうレベルの問題じゃない)
正解は○がって数書こうと思ったけど、結構偏ってるな、疑うなら書くが。

問題のニュアンスはわりと詳しいつもりやつが理解してないことが多かったもの。
その前に内容がマニアックに偏ってるけどな。
0291nobodyさん2009/05/16(土) 12:58:07ID:???
こんな?

1× 2× 3? 4○ 5× 6? 7× 8○ 9○ 10?
11○ 12? 13×

?のとこはワカンネ
あと設定次第だったり、環境次第だったりするところがあるよね
ViewStateUserKeyが空文字の場合とか、
認証チケットは暗号化されてるけど認証に至るまでの経緯でhttpsでないと安全でない場合とか
0292nobodyさん2009/05/16(土) 13:04:00ID:???
いや8も×か 中身じゃなくてApplicationオブジェクトそのものは別インスタンスかな
0293nobodyさん2009/05/16(土) 13:08:00ID:???
正解は5個、かな?(ざっと確認してみたから間違ってたらすまんね)

環境しだいだったりするのは確かにあるが、
環境を特殊にどうこうした場合とかではなくて
一般的な標準的な状態と思ってもらっていい。
ViewStateUserKeyの場合はもちろん文字列をうまく設定すれば普通に利用できるか?という話だし、
認証チケットの扱いも特殊な状況は想定していない。
単にHTTPSじゃない経路で認証チケットを使うのは安全か?(認証チケット自体は暗号化されているが)。
ということ

Applicationオブジェクトは、そこに保存した変数というか、中身のことと思ってくれていいよ。
書き方悪かったな、いわゆるApplication変数はサーバ内で完全に一つと思っていいか?ということ。
0294nobodyさん2009/05/16(土) 15:53:09ID:???
いやいや気になるから正確な答えを頼むよw
0295nobodyさん2009/05/16(土) 16:34:45ID:???
2 4 9 10 が○
それ以外は×だよ
0296nobodyさん2009/05/17(日) 06:17:41ID:???
基本的にとか、望ましいとか言っちゃうとあいまいさがのこるから
問題文もう1回精査してから回答とともにアップしなおしてくれ
0297nobodyさん2009/05/17(日) 09:24:47ID:???
やだよめんどくさい。

1.Global.asaxのインスタンスはアプリケーションドメイン内で単一である
2.Global.asaxにインスタンス変数を定義するば、HttpContextのようにリクエストに関する情報を保持することができる
3.BeginRequestイベントとHTTPハンドラ(ページインスタンスなど)は常に同一スレッドで実行される
4.ViewStateUserKeyにユーザIDやセッションIDを設定すると、はCSRF対策にも利用できる
5.Global.asaxにインスタンス変数を定義すると、グローバル変数として使える
6.汎用ハンドラ(ashx)でIsReusableがtrueを返すように実装すると、そのハンドラは可能な限り再利用される
7.グローバル変数が必要な時はApplication変数を使用しなければならない
8.サーバを分散していない場合、Application変数はそのWebアプリケーション内で完全に一つである
9.ViewStateの検証が有効(デフォルト)の場合は、ViewStateの値にはインジェクション系の対策は不要である
10.Webガーデンを使用していない場合でも、そのアプリケーションプール用のワーカープロセスが複数同時に動作することはあり得る
11.認証チケットはデフォルトで暗号化されているため、HTTPSでなくても安全である(盗聴されても不正ログインはできない)
12.フォーム認証でログアウトすると、その認証チケットは無効となり、その認証チケットでは二度とアクセスできなくなる
13.SQLインジェクションは、Webアプリケーション特有の脆弱性である

1.×
2.○
3.×
4.○
5.×
6.×
7.×
8.×
9.○
10.○
11.×
12.×
13.×
0298nobodyさん2009/05/17(日) 11:05:51ID:???
>>295以上の情報が何もないじゃないか

解説ぐらい書けよ
0299nobodyさん2009/05/17(日) 12:05:47ID:???
自分で調べろよw
0300nobodyさん2009/05/17(日) 12:14:56ID:???
今携帯だから後で書くよ。
疑問のある番号あるなら疑問点を書いてね。
0301nobodyさん2009/05/17(日) 12:40:24ID:???
5.Global.asaxにインスタンス変数を定義すると、グローバル変数として使える
インスタンス変数ってのは、スタティックじゃない変数ということかな?
Global.asaxにPublicな変数定義しとけば、グローバルに使えると思うんだが
0302nobodyさん2009/05/17(日) 13:12:04ID:???
そ、スタティックじゃないってこと。
0303nobodyさん2009/05/17(日) 13:16:28ID:???
単にグローバル変数ってのもやや曖昧だったね。
ここでは、アプリケーション全体で共有できるグローバル変数という意味。
まあだいたい一般的にこういう意味になるとは思うが。
0304nobodyさん2009/05/17(日) 16:45:45ID:???
クイズ
1.Global.asaxのインスタンスはアプリケーションドメイン内で単一である
2.Global.asaxにインスタンス変数を定義すると、HttpContextのようにリクエストに関する情報を保持することができる
3.BeginRequestイベントとHTTPハンドラ(ページインスタンスなど)は常に同一スレッドで実行される
4.ViewStateUserKeyにユーザIDやセッションIDを設定すると、CSRF対策にも利用できる
5.Global.asaxにインスタンス変数を定義すると、アプリケーション全体で共有できるグローバル変数として使える
6.汎用ハンドラ(ashx)でIsReusableがtrueを返すように実装すると、そのハンドラは可能な限り再利用される
7.グローバル変数が必要な時はApplication変数を使用しなければならない
8.サーバを分散していない場合、Application変数はそのWebアプリケーション内で完全に一つである
9.ViewStateの検証が有効(デフォルト)の場合は、ViewStateの値にはインジェクション系の対策は不要である
10.Webガーデンを使用していない場合でも、そのアプリケーションプール用のワーカープロセスが複数同時に動作することはあり得る
11.認証チケットはデフォルトで暗号化されているため、HTTPSでなくても安全である(盗聴されても不正ログインはできない)
12.フォーム認証でログアウトすると、その認証チケットは無効となり、その認証チケットでは二度とアクセスできなくなる
13.SQLインジェクションは、Webアプリケーション特有の脆弱性である
0305nobodyさん2009/05/17(日) 16:49:05ID:???
回答
1.×Global.asaxは各リクエストに一つのインスタンスが割り当てられる(リクエスト完了後はプールされて再利用)
2.○1.より、リクエストに関する情報をインスタンス変数に保持することができる
3.×セッション準備時の同期化などの仕組みにより、スレッドが切り替わることがある
4.○もちろん使える
5.×1.より、インスタンス変数はアプリケーション全体で共有できない
6.×実はIsReusableは無視されている(常に再利用されない、まあこれは今の実装の話であってどうでもいい話ではある)
7.×そんなわけはない(むしろApplication変数はあまりお薦めではない、これにはいろいろ理由があるが)
8.×Webガーデンを使えば単一にはならない、またアプリケーションのリサイクルなどにより一時的に複数になり得る
9.○検証が有効であれば、少なくとも中身を改ざんされることはない(キーが漏れてるとかそういう状況はない前提)
10.○ワーカプロセスのリサイクルにより、一時的に複数同時に動作することがある
11.×盗聴されれば見事に不正アクセスできる(チケットの暗号化の意味はまた別にある)
12.×認証チケットは無効にはできない(ログアウトはクッキーを消すだけ)、とくに有効期限が長い場合これは要注意
13.×そんなわけはない
0306nobodyさん2009/05/17(日) 20:31:50ID:???
こういうのは問題の出し方が難しいな
主眼をどこに置くかで結果が違いそうなこともありそうだ

それはともかく知らないことがいくつかあったので勉強になったよ
今度実験してみようっと
0307nobodyさん2009/05/18(月) 18:33:02ID:???
.NETっでviewState OFF設定にしても、実行したら勝手にviewStateが入ってるんだけどなんでなんだろう?
0308 [―{}@{}@{}-] nobodyさん2009/05/18(月) 18:35:32ID:???
>>307
イベント識別するのにもViewState使ってたと思うからその分じゃね
0309nobodyさん2009/05/19(火) 01:35:59ID:???
でも.NETでできてるサイトで、ソース(htmlの)みてもviewStateが一切無いページとかあるんだよね。
つまり.NETのコントロール一切使わなければ出ないって事かな?
それだと.NET使う意味ねーな・・・
0310nobodyさん2009/05/19(火) 01:54:25ID:???
例えばどこ?
0311nobodyさん2009/05/19(火) 01:55:28ID:???
ああそうだMVCならでないかもね
0312nobodyさん2009/05/19(火) 21:35:47ID:???
なんか、viewstate="false"ってやってても
<asp:CheckBox id="CheckBox1" runat="server" />
がたくさんあると、viewstateがえらいことになる・・・・

なんとかしてOFFにしたいもんだ
0313nobodyさん2009/05/19(火) 22:02:16ID:???
実際に20個設置してみたけど、これがえらいこと??
PostBack前の状態を維持する仕組みをhiddenフィールドで
ベタに構築することを考えたら遙かにサイズは小さいと思うし、
セキュリティ的にも安心できるし、
十分に利便性はあると思うけど

それを考慮してもViewStateが嫌ならASP.NETを使わないか
旧ASPとして利用するしかないね
0314nobodyさん2009/05/19(火) 23:02:51ID:???
enableviewstate=falseの意味ねーじゃん
ばか?
0315nobodyさん2009/05/19(火) 23:11:27ID:???
20個設置してたら2kぐらいの文字列にならん?
0316nobodyさん2009/05/20(水) 00:04:28ID:???
<form runat="server">を使わなければviewstate撲滅できるよ
使えるコントロールが限られるけど
0317nobodyさん2009/05/20(水) 00:25:56ID:???
>>314
falseに設定したものはviewstate反映されてないだろ?
0318nobodyさん2009/05/20(水) 01:07:46ID:???
>>317
試してから言えよ
0319nobodyさん2009/05/20(水) 13:35:47ID:???
>>318
falseにしたコントロールやページに関してはViewStateに反映されないよ
ただASP.NETとして必要なぶんが反映されてるだけ
0320nobodyさん2009/05/20(水) 14:49:36ID:???
んだな

>ASP.NET によって使用されるページには、ポストバックを検出することを目的として、
>EnableViewState が false の場合でも読み込まれる非表示のビューステート フィールドが存在する場合があります。
ちゃんとMSDNにも書いてある。つまりASP.NETの仕様。

phpでも、ページからのpostであることを示すために、
hidden fieldで<input type="hidden" name="mode" value="postback">とかして、
$mode = $_POST["mode"];で受け取ってpostbackが入っていたらpostされたと認識して
初期処理したりするけど、それをViewStateを利用して実現してる。

これすら嫌ならもはやwebアプリは向いてないから止めたほうがいいと思う。
それかすべてsessionでやる。
モバイルASP.NETはこのViewStateの仕組みを一部のコントロールを除いて
ViewStateでなくてsessionでやってるよ。
0321nobodyさん2009/05/20(水) 15:52:47ID:???
ViewStateだとドロップダウンリストの選択位置とか覚えておいてくれるから便利。
PHPとかで実装しようとすると大変だろうな
0322nobodyさん2009/05/20(水) 16:52:27ID:???
基地外ばっかり
0323nobodyさん2009/05/20(水) 17:51:12ID:???
>>321
大変ではないけどめんどくさいだけ
便利なのには違いない

つうか、必要でないViewStateだけ残して切ればいいじゃん
それすら嫌とか言うなら論外だろ

何かデータを保持るためのInputとかを別の形で実装してるようなもんじゃないか
0324nobodyさん2009/05/20(水) 18:01:54ID:???
ViewState切り詰め話はTechNet辺りでもよく出てるが、
大した問題にならないから無視しろか、
サーバーコントロールは極力使わなずResponse.writeしろの、
大体この二つに分かれてる感じだな。

一時期俺も削減に躍起になってたけど、そもそもASP.NETって時点で…
と気づいてからは余りこだわらなくなったな。
0325nobodyさん2009/05/20(水) 21:21:01ID:???
10KBのViewStateには超文句言うのに平気で数十KBの画像おきまくったりするページワロス
0326nobodyさん2009/05/21(木) 00:42:51ID:???
画像は受信拒否できるしなぁ
ViewStateは問答無用だろ。。
0327nobodyさん2009/05/21(木) 00:45:50ID:???
制作者からの視点で論じてたんじゃないのか?
0328nobodyさん2009/05/21(木) 01:36:07ID:/8BtlCky
ViewStateこつこつ削ってどれだけ結果に違いが出るんだよ。ほぼ意味ねーだろ。こういう所に拘るPGはマジ使えねぇ。
0329nobodyさん2009/05/21(木) 02:38:51ID:???
携帯みたいな従量課金の場合には影響があるので
気になるプログラマはいると思う

んで、ユーザ数が多いと、そういうコツコツが大事だったりするので、
なんでViewStateを完全に無くすことができないかを知りたいと思う好奇心は
プログラマに必要な資質だと思う

だけど、ViewStateの動作を詳しく把握してもいないのに
ViewStateの存在を制御できないから気持ち悪いとか、
こんなにViewStateがたくさん埋め込まれるのは理解できない
みたいなこと言ってるプログラマがいたら確かに使えない奴だと思う
0330nobodyさん2009/05/21(木) 04:14:36ID:???
>携帯みたいな従量課金の場合には影響があるので
>気になるプログラマはいると思う

普通自動でセッションに保存されるでしょ
0331nobodyさん2009/05/21(木) 07:40:13ID:???
例えばGoogleの検索結果なんかはそのままブックマークできるけど、
そういうのやろうとすると邪魔じゃね?viewstate。
■ このスレッドは過去ログ倉庫に格納されています