2009-10-22 6 views
9

私はポストバックの間にobjectの値を維持したいページがあります。 私はオブジェクトViewStateまたはhiddenfieldを使うのがベストです

  1. ストアビューサテ
  2. ストアを使用するための最良の選択肢である隠しフィールドの値

の値の値を維持するために、二つの方法を考えています掲載結果に基づいて

答えて

10

ビューステートがクライアントサイドスクリプトで参照する必要があります。もしあなたが隠しフィールド。

はまた、ソースを表示する方法を知っている人に見えるプレーンテキストとして保存し、それを、データが敏感であれば、ビューステートがデフォルトで、隠しフィールドに対し、デフォルトで暗号化されていることを考えます。 @Andrewハレの音符当たり

編集

自分自身の答えに、私はこれを編集しています。注意することは重要な違いです。私は誰かが自分の監督に基づいてViewstateを使って "安全"だと思うのが嫌いです。

のViewStateはデフォルトで暗号化されていないが、それは基本-64エンコーディングとして格納されています。それはかなり簡単にデコードすることができるので、デフォルトで暗号化されているのでViewstateを使用することは有効ではありません。プレーンテキストよりは優れていますが、 "Viewstateを復号化する"または "Viewstateを復号化"する機能を持つ人はいません。

クライアント側のコードで隠し情報を保護するためにViewstateに頼らないでください。

記事hereは、正しく暗号化する方法を示します。 (しかし、パフォーマンスの問題についても警告します)。私は何かが欠けていない限り、隠しフィールドは、デフォルトでは、 ない場合、私は、私は同意わからない

0

私はViewStateが好きです。ハックするのがはるかに難しいです。嫌な人はあなたのページのハイライトを簡単にあなたのページに投稿できますddenフィールド

0

ビューステートに保存します。隠しフィールドは、クライアント側で操作できる情報を格納するためのもので、ブラウザ上で更新することができます。ビューの状態は、あなたが自分で隠しフィールドでそれを行う必要があります、改ざんに対してasp.netによって検証されます。

2

ViewState自体が非表示の入力に格納されているので、実際には問題にはなりません。あなたのために簡単なものを使用してください。それが私にとってはViewStateを選択するのは、ASP.NETランタイムがオブジェクトの直列化と逆シリアル化を処理するからです。

+0

は... ViewStateが暗号化されています。私は通常、あなたの答えを信じているので、私は何かが欠けていると思います。 – David

+1

いいえ、あなたは良い点を作る - のViewStateを暗号化することができます(しかし、それは常にではありません - デフォルトでは、それは単にベース-64エンコードです)。ナイスキャッチ! :) –

+0

ありがとう!もちろん、ベース64についてはあなたが正しいです。それは重要な違いです。私はこれを反映するために私の答えを編集しています。 – David

関連する問題