1

セッションを使用して次の 2 つのことを行っています。

  1. 特定の会社についてどの css ファイルをロードするかを追跡します。
  2. 私たちが所属している会社を追跡する Company Id Guid を追跡します。

これが時々ヌルとして入ってくるのを見ていますが、追跡するための一貫した問題が発生していません。これはおそらく私のコードで追跡する必要があるものであることは間違いありませんが、これにより、セッションに関する質問が発生します...

  1. 画面間で情報を渡すためにセッションに頼っていますか?
  2. それは一貫していますか?
  3. ページのロード間でそれをクリアできるのは何ですか?
  4. セッションはユーザーが簡単にクリアできますか?
  5. もっと信頼できるものを使用する必要がありますか?

これを本番運用に移して、いろいろと問題が出てくるのではないかと心配です。

私は単にこれをやっています:

Session["Css"] = css;

同じように読みます:

css = Session["Css"]

アップデート

私が使用しているセッション:

HttpSessionStateBase コントローラ セッション

4

2 に答える 2

4

セッション状態にはいくつかの種類があります。InProc、StateServer、および SqlServer。デフォルトは InProc だと思います。詳細については、MSDNのこちらこちらをご覧ください。

これらはそれぞれ、web.config ファイルで定義された sessionState のタイムアウト値に従います。単一サーバーのセットアップ (これは私が通常行っていることです) の場合、通常、次のように sessionState をセットアップします。

<sessionState 
    mode="StateServer" 
    stateConnectionString="tcpip=127.0.0.1:42424" 
    timeout="2880" />

これは Forms Auth と同じデフォルトのタイムアウトであるため、ユーザーが Cookie/セッションを認証している限り、セッションは維持されます。これには、ASP.NET State Server のスタートアップを に設定する必要がありますAutomatic。以下は、型とその潜在的な欠点を説明するための私のハイレベルなパスです。

インプロセス

これは、アプリケーション プールが Web アプリのワーカー プロセスをリサイクルするたびにリセットされます。これがあなたに起こっていることだと思います。これが、ランダムに見えるときにセッション変数が null になる理由です。

StateServer

これにより、apppool のリサイクル間で状態が維持されますが、ASP.NET State Server Service を有効にし、スタートアップの種類を自動に変更する必要があります。

専用の状態サーバーを実行しない限り、Web ファームまたは Web サイトを処理する複数の Web サーバーがある場合、問題が発生する可能性があります。

これには、セッション変数に格納されている変数が[Serializable].

SQLサーバー

これにより、セッション変数が SQL データベースに永続化されます。これは、一般に、Web ファームの状況に最適な方法です。

これには、セッション変数に格納されている変数が[Serializable].

于 2012-12-28T21:30:18.360 に答える
0

GetCss() へのメソッドをこれらの行に沿って何か書いていませんか?

GetCss() {

    var css = (CastToYourTypeHere)Session["css"];

    if(css == null) {

        //do whatever you'd normally do here to set the css, 
        //e.g. get the users guid and find their company css, and set css equal to it
        css = myHypotheticalGetCssBasedOnTheUserFunction();

    }

    return css;

}

そうすれば、その中のすべてのベースをカバーすることができます。何らかの理由でセッションが失われた場合は、最初の「getCssForThisUser」タイプのコードを再実行するだけで、Session を喜んで使用できます。

IMO、セッションは、説明した例のタイプのページ間で各ユーザーのこの種のデータを保持する悪い方法ではありません。

于 2012-12-28T21:41:04.480 に答える