4

こんにちは、アプリケーションでセッションを使用していますが、ページでセッション値を維持するためのベスト プラクティスは何かと考えていました。セッションに保存されている値を、特定のページに戻るまで保存する必要があります。説明しましょう:

Page A:                             Page B:
Sets Session["ID"] = 5       -->    Gets Session["ID"]
And redirects to Page B             and populates data.

Session["ID"]ページ B でポスト バックが実行されるまで存続するには、ページ B が必要です。これが必要なのは、データベース内の更新データの値を使用するためですSession["ID"]

私の質問は次のとおりです。ポストバックSession["ID"]が実行されるまで、がその価値を維持するという保証はありますか? 死なない?もしそうなら、その価値を確実に維持するために私が取ることができるいくつかの方法は何ですか?

ページBにプライベート変数を作成して、Session["ID"]Page_Loadに保存することを考えていました。あなたの考えを教えてください、ありがとう。

申し訳ありませんが、次のように言うべきでした: ユーザーに の変更を許可できませんID。いいえQuery Strings、ありがとう。

4

6 に答える 6

2

デフォルトでは、セッションはサーバーのメモリに保存されます。これは、ユーザーのセッションがタイムアウトした場合に問題になる可能性があります。また、ファームとして複数のサーバーを使用している場合、ユーザーが毎回同じサーバーを使用することを保証できないため、メモリ内のセッションを使用することはできません。

セッション情報が失われないことを保証する最良の方法は、ユーザーのセッションをSqlServerデータベースに永続化することです。これは、その設定方法に関するチュートリアルです。

セッションは、一部のポスターが示唆しているほど、パフォーマンスを低下させるものではありません。これは、各ユーザーの状態を簡単に維持するための非常に便利な方法です。

また、ASP.NETセッションオブジェクトをラップするための良い方法については、この質問に対する私の回答を参照してください。

于 2009-03-13T19:22:20.340 に答える
1

asp.netを使用していて、あるページから別のページにデータを転送したいので、CrossPageポストバックを使用することもできます

msdnからのクロスページポストバック:

状況によっては、あるページを別のページに投稿したい場合があります。たとえば、各ページで異なる情報を収集する複数ページのフォームを作成している場合があります。その場合、別のターゲットページに投稿するように、ページ上の特定のコントロール(ButtonコントロールなどのIButtonControlインターフェイスを実装するコントロール)を構成できます。これは、クロスページ投稿と呼ばれます。クロスページ投稿には、Transferメソッドを使用して別のページにリダイレクトするよりもいくつかの利点があります。詳細については、「ユーザーを別のページにリダイレクトする」を参照してください。

if (Page.PreviousPage != null)
{
    TextBox SourceTextBox = 
        (TextBox)Page.PreviousPage.FindControl("TextBox1");
    if (SourceTextBox != null)
    {
        Label1.Text = SourceTextBox.Text;
    }
}

ソース: http: //msdn.microsoft.com/en-us/library/ms178139.aspx

これは、私たちがいくつかのプロジェクトで使用している方法であり、うまく機能します。それがあなたのニーズに合っているかどうかはわかりませんが、一見の価値があるかもしれません。

于 2009-03-13T19:55:21.947 に答える
0

セッションを使用する代わりに、変数をクエリ文字列または非表示の投稿フィールドを介してページからページに転送できます。この方法では、変数はクライアントと一緒に存在し、セッション内にある場合のようにタイムアウトしません。

編集: ユーザーに値を改ざんさせたくない場合は、非表示の投稿フィールドを暗号化/難読化できます。

于 2009-03-13T18:17:00.450 に答える
0

セッション変数は、セッションがタイムアウトするまで存続します (タイムアウト期間は web.config ファイルで指定されます)。

セッションでデータを永続化するとサーバーのリソースが消費されるため、注意が必要です。

asp.net では、viewstate を使用して、同じページのポストバック間でデータを保持できます。

あなたの質問については、URL クエリ文字列パラメーターを使用してページ間で ID を渡すことをお勧めします

つまり、myurl.aspx?ID=5

次に、aspx コードで次のようにします。

int ID = (int)page.request.params["ID"];

編集:

ユーザーが ID パラメーターを変更することに懸念がある場合は、ページ B のページロードにビジネス ロジックを配置して、ユーザーがその ID 値を変更する適切な権限を持っていることを確認できます。

于 2009-03-13T18:18:38.620 に答える
0

セッションがタイムアウトした場合、あなたの価値はもちろん失われます。ページの読み込み時に変数に格納できます-それは機能するはずです。

私が本当に疑問に思っているのは、ページ A からページ B にリダイレクトするときに、GET パラメータとして渡さないのはなぜですか? 完全に正当な理由があるかもしれませんが、通常、あるページから別のページにデータを渡したい場合は、そのようにします。

于 2009-03-13T18:19:04.500 に答える