ASP.NETにおけるマルチページ値伝達の理解
7992 ワード
ASP.NETのページフォームは自身に提出され、返信機能が完了するため、デフォルトではPOST方式でマルチページ転送はできません.これについて
いくつかの値伝達方式の分析は以下の通りである.
1.URL転送
これは古典的な値伝達方式で、この方法の使用は非常に簡単ですが、伝達された値はブラウザのアドレスバーに表示され、できません.
オブジェクトを渡す.従って、この方法は、伝達される値が少なく、セキュリティ要件が高くない場合に一般的に用いられる.にあります.aspxページ開発ではスーパーリンク文を使用できます
本進行値は、以下のコードに示すとおりです.
<asp:HyperLink runat="server" ID="HpLink" NavigateUrl="~/GetValues.aspx?urlvalue1=intel&urlvalue2=amd">URL </asp:HyperLink>
以上のリンクテキストは、GetValueにページをジャンプします.aspxページは、URLを介してurlvalue 1変数とurlvalue 2変数を渡し、その値はそれぞれ
Intelとamd.にあります.csのサーバ側メソッドでは、HttpResponseオブジェクトのRedirectメソッドを呼び出し、ブラウザ側を新しいページにリダイレクトすることもできます.
URLを介して値を伝達し、以下のコードに示す.
Response.Redirect(“~/GetValues.aspx?urlvalue1=intel&urlvalue2=amd”);
2.セッション送信
この方法では,各データをサーバ変数に格納し,比較的多くのデータを伝達でき,セキュリティが高いため,ユーザアイデンティティの検証によく用いられる.
証明機能にあります.ただし、Session変数は、データを格納しすぎるとサーバリソースが消費されるため、プログラミング者は使用時に慎重に使用する必要があります.
法は以下のコードで示す.
Session["SessionValue"] = “ATI”;
//
Session[0] = “ATI”;
// :
string str = Session["SessionValue"].ToString();
//
string str = Session[0].ToString();
Sessionは、閲覧者が自分のブラウザまたはサーバSessionを閉じるまで、アプリケーションの複数のページで名前/値ペアで共有することができる
タイムアウト(設定可能、デフォルトは20分).
3.Cookie転送
Cookieは、閲覧ユーザのパソコンにデータを格納し、テキストファイルとして格納するため、比較的特殊なデータ格納方式である.
ディスクにあります.この方式は非常に興味深いもので、多くのログインシステムはCookieを利用してユーザーの自動ログインを実現している.すなわち、ユーザが一度ログインするログイン情報は
ユーザーコンピュータのCookieファイルに書き込まれ、次回ログイン時にそのCookieを自動的に読み込んで認証を完了します.Cookieでデータを渡すのは
便利で、保存時間は自由に設定できますが、安全性が高くなく、プログラミング者はCookieに依存しすぎず、結合した方法で機密データを完成しなければなりません.
ストレージ.
ASP.NETにおける操作Cookieの主なタイプはSystemにある.Webネーミングスペースでは、HttpCookie、HttpResponseおよび
HttpRequest.HttpCookieは独立したCookieのセキュリティタイプを確立し、操作することができ、HttpResponseとHttpRequestのCookies属性にアクセスすることができる.
HttpCookieCollectionコレクションオブジェクトを取得し、HttpCookieオブジェクトを読み取りまたは追加します.Cookieを追加する方法を以下のコードで示します.
<span style="font-size:18px;">// HttpCookie ,
HttpCookie ck = new HttpCookie("CookieValue");
// ck “Value” ( )
ck.Value = “Cookie ”;
// ck 360s, 6
ck.Expires = DateTime.Now.AddSeconds(360);
// ck ( )
ck.Domain = "<a target=_blank href="http://www.google.cn">www.google.cn</a>";
// ck HttpCookieCollection
Response.Cookies.Add(ck);
//
//Response.AppendCookie(ck);
</span>
次のコードに示すように、ユーザのCookieを読み込むのは簡単です.HttpCookieCollectionコレクションオブジェクトのサブアイテムを名前に基づいて読み込むだけです.
string str = Request.Cookies["CookieValue"].Value;
これに加えて、以下のコードに示すように、1つのHttpCookieを用いて複数の名前/値ペア形式のCookie情報を格納することもできる.
HttpCookie ck = new HttpCookie("CookieValue");
// / Cookie
ck.Values.Add("value1", “one”);
ck.Values.Add("value2", "two");
// ck 100 , 100
ck.Expires = DateTime.Now.AddYears(100);
//
Response.Cookies.Add(ck);
//Response.AppendCookie(ck);
これらのCookieを読み込むには以下のコードを示します.
string str = " 1:"+Request.Cookies["CookieValue"].Values["value1"];
str += " 2:" + Request.Cookies["CookieValue"].Values["value2"];
説明:多くのブラウザでは最大4096バイトのCookieがサポートされています.数少ない値をユーザーコンピュータに保存する場合は、ブラウザに制限があります.
サイトごとにユーザーコンピュータに保存できるCookieの数を指定します.ほとんどのブラウザでは、サイトごとに20個のCookieしか保存できません.もっと保存しようとしたら
多くのCookieは、最初に保存したCookieが削除されます.すべてのサイトからのCookieの総数を制限するブラウザもあります.この制限は通じます.
常に300個です.ユーザーは自分のブラウザを設定し、Cookieの受け入れを拒否することができます.この場合、他のデータストレージ方式と組み合わせるしかありません.
4.Server.Transferトランスファ
この方法のステップは比較的多く,この方法を用いたプログラマは別のページでオブジェクト属性を公開する方法で値にアクセスすることができ,この方法を用いる.
法は対象に向いている.このメソッドのコード作成は複雑ではありません.まずpublic権限の属性を定義することで、必要な伝達値を返すことができます.
2ページ目でContextを使用します.Handlerプロパティは、前のページインスタンスオブジェクトの参照を取得し、カスタムプロパティにアクセスすることで取得できます.
必要な値を取ります.
仮に...aspxページはデータを渡すページで、SendValue.aspx.csのページクラスにpublicプロパティを定義し、getで直接
ページ内のサーバーコントロールのプロパティ値として渡す値を返します.
public string TransferData
{
get
{
return "VIA";
}
}
SendValuesでaspx.csのメソッド(ButtonコントロールのClickイベント処理メソッドなど)でHttpServerUtilityオブジェクトを呼び出すTransfer
メソッドは、以下のコードで示します.
Server.Transfer("~/GetValues.aspx");
仮にGetValue.aspxはGetValueで2ページ目です.aspx.csのPage_Loadメソッドでは、前のページから渡された値を受信します.
次のコードを示します.
// SendValues SV_Page
SendValues SV_Page;
// HttpContext Handler , SendValues , SV_Page
SV_Page = (SendValues)Context.Handler;
//SV_Page SendValues.aspx , TransferData
string str = SV_Page.TransferData;
この方法は,オブジェクトベース向けのプログラミング者にとって非常に理解しやすいことがわかる.ただし、ページ間で数の多い値を渡す必要がある場合は、
法は多すぎる属性を定義する必要があり,やや煩雑である.また、プログラミング者は、HttpContextオブジェクトの「Iterms」プロパティを使用して複数の名前/値ペアの
データ、SendValue.aspx.csがHttpServerUtilityオブジェクトのTransferメソッドを呼び出すメソッドの1つで、修正コードは以下のようになります.
Context.Items["value1"] = "one";
Context.Items["value2"] = "two";
GetValuesでaspx.csのPage_Loadメソッドでは前の1ページに渡された値を受け取り,修正コードを以下のコードに示す.
string str = " 1:" + Context.Items["value1"].ToString();
str += " 2:" + Context.Items["value2"].ToString();
5.アプリケーション転送
厳密には、サーバ側でHttpApplicationオブジェクトが状態変数を生成することによって、必要な情報が格納されるべきである.
オブジェクト変数の使用可能範囲はWEBアプリケーション全体をカバーします.そのため、オブジェクトは一般的に、オンライン人数など、公表する情報を格納します.
およびユーザ個人の機密データは、このような方法で格納する必要はありません.HttpApplicationオブジェクトには、LockメソッドとUnLockメソッドの2つの一般的なメソッドがあります.
アプリケーション変数に格納されているデータを複数のユーザが書き込む問題を処理します.ロックメソッドはすべてのアプリケーション変数をロックし、ブロックします.
他のユーザがApplicationオブジェクトの変数値を変更するのを止め、UnLockメソッドはHttpApplicationオブジェクト変数のロックを解除します.に合格
HttpApplicationオブジェクトの値伝達方法はSessionと比較的類似しており,ページクラスのある方法でコードを記述することは以下のようになる.
Application["a"] = " ";
Application["b"] = " ";
Application["c"] = “Mac”;
以上のコードは、HttpApplicationオブジェクトの変数に3つの文字列値を簡単に保存し、これらの変数はプログラム全体で共有されています.
ユーザは、対応するページから同様に取得できます.これらの変数を取得する方法を以下のコードに示します.
Application.Lock();
string str = " 1:" + Application["a"];
str += " 2:" + Application["b"];
str += " 3:" + Application["c"];
Application.UnLock();
注意:使用方法はセッションと似ていますが、セッションは個別のユーザーごとにブラウザを閉じると無効になります.
HttpApplicationオブジェクトに格納される変数は、ブラウザを閉じたユーザーがいても、すべてのアクセスプログラムのユーザーに対して、変数の値は失われません.
6.ページ間転送
ページ間でHttpServerUtilityオブジェクトを転送および呼び出すTransferメソッドは似ていますが、より効率的です.HttpServerUtilityが呼び出されたため
オブジェクトのTransferメソッドはサーバベースのメソッドであり,ページ間転送はブラウザ側のメソッドベースである.この方法は主にコントロールを設定するものです
PostBackUrlプロパティでは、コントロール(Buttonなど)を操作して指定ページに移動し、前のページの
すべてのコントロールオブジェクトとそのプロパティ値.最初のページをSendValueとします.aspxは、このページ(*.csコードファイル以外)に2つのコントロールを追加し、
以下のコードで示します.
<asp:TextBox runat="server" ID="PbValue" Text="Geforce TX280"></asp:TextBox>
<asp:Button runat="server" ID="btn6" Text=" " PostBackUrl="~/GetValues.aspx" />
上記のコードでは、TextBoxコントロールの「Text」属性は「Geforce TX 280」であり、これは転送する必要がある値である.Buttonコントロールの
PostBackUrlプロパティはGetValueを指定します.aspxページで、必要な伝達値を受信できます.GetValuesでaspx.csの
Page_Loadメソッドでは,以下のコードを記述する.
//PreviousPage
if (PreviousPage != null)
{
// PreviousPage “ID” PbValue , TextBox
TextBox tb = (TextBox)PreviousPage.FindControl("PbValue");
// tb
if (tb != null)
{
// tb “Text” str
string str = tb.Text;
}
}
上記のコードは、HttpServerUtilityオブジェクトを呼び出すよりも、前のページのTextBoxコントロールの「Text」属性値を簡単に取得します.
Transferメソッドはより迅速であり,処理手順を低減した.