2

私は WebMatrix (C#) を使用して、所属する組織のイントラネット Web アプリケーションを設計しています。

私は 1 つのデータベース駆動型サイトを作成し、現在別のサイトに取り組んでいます。しばらくの間、セッション変数がランダムに null になり、エラーがスローされるという問題が発生しました。そのため、単純なセッション変数の 1 つが代わりにサーバー キャッシュ メモリを使用して切り替えられました (これは当初、より不安定になると考えていましたが、これまでのところ、まだ確認されていません...)。

質問の 1 つは、Session 変数を実際に使用することはあるのでしょうか。それが実際にそう思われていたのと同じくらい不安定であるなら、それらはほとんど何の役にも立たないように見えます.\

私はそれらが技術的にはクッキーであることを知っているので、それらのデータが信頼されるべきではないことを知っていますが、そこに問題があります. 「信頼できる」他のページにデータを送信する必要があります。これにより、セッション変数と Cookie の両方が除外されます。

私は通常、SSL でさえ役に立たない機密情報 (社会保障番号など) が露骨に「プレーンテキスト」で表示されるため、クエリ文字列や URL データには近づきません。

サーバーのキャッシュ メモリも揮発性であり、依存することはできません。

AppState 変数はユーザー固有ではありません。

それは非表示の入力フィールドを残します...ここでの問題は、「投稿」の後にResponse.Redirectなどを行うことがあるため、投稿後にC#が常にページをレンダリングするとは限らないことです(そうです)。

これは私の知識不足なのかもしれませんが、どこまでいっても追い詰められているようです。

すべてのページ情報をページごとに個別のデータベースに保存し、他のページの sql クエリで取得して、Web ページを使用してあるページから別のページに「露骨に」表示された情報を信頼できるものにしないようにする必要がありますか? それでも、この方法でも、複数の異なるユーザーを使用すると問題になりますよね?

4

1 に答える 1

2

ASP.NET にはさまざまなセッション状態モードがあります。

  • InProc、これはインメモリです。セッション状態は、IIS アプリケーション プールがリサイクルされない限り、または IIS 全体が再起動される限り存続します。

  • SqlServer . これは、セッション状態が SQL Server ストレージに格納されていることです。IIS アプリケーション プールまたは IIS 全体の再起動後もセッションが存続するため、これは素晴らしいことですが、セッションへのすべてのアクセスでセッション状態オブジェクトの逆シリアル化および/またはシリアル化、さらにはデータベース接続などが必要になるため、ボトルネックになります。の上。

  • 状態サーバーSqlServerに似ていますが、Microsoft が提供するセッション状態サーバーを使用します。このモードはまったく使用されませんが、オプションです... (私は経験がありません)。

  • カスタム。いくつかのインターフェイス/抽象クラスを実装し、独自のセッション状態ストレージを定義できます。

一方、セッション状態はサーバー側であり、Cookie とは関係ありません。これは、HTTP によって支配されるステートレスな世界で状態をシミュレートする方法です。ASP.NET はブラウザに HTTP Cookie を書き込むため、ブラウザ セッションを一意のサーバー セッションにリンクすることもできます。

セッション状態が有用かどうかについて....私の場合、「状態」をまったく避けることにしました。私は可能な限り無国籍でいることを好みます。設定、設定、またはユーザーを識別するためにブラウザーにいくつかの HTTP Cookie を書き留め、要求ごとに処理を行います。

ほとんどの場合、ストア内のデータに直接アクセスするのではなく、いくつかのキャッシュ内でデータにアクセスするため、優れたキャッシュメカニズムはリクエストのパフォーマンスを非常に最適化できるため、これは高速であることを意味します!

ちなみに、Session State は大きなオブジェクトを格納するのではなく、基本的な値を格納するために使用する必要があります。セッション状態はキャッシュではありません。たとえば、セッション状態は、現在ログインしているユーザーやそのロールなどを保存するのに適した場所です。またはプロファイル識別子。知るか。

その他のデータは、リクエストごとにクエリする必要があります。

繰り返しになりますが、環境を最適化し、各リクエストでデータベースなどにアクセスしてシステムのパフォーマンスを低下させないという点で、キャッシュはあなたの友達でなければなりません。

于 2012-12-12T15:55:09.393 に答える