1

私は Web ファーム サーバーに Web アプリケーション (mvc4 および .net4.5) を持っていますが、1 つのことが混乱しています。セッション ID がホワイトアウトの理由を大きく変更し、セッション状態に保存したすべてのユーザー データが失われます。しかし、ローカルマシンでは問題なく動作します。

私は私のウェブ設定でこの設定を使用します:

<sessionState mode="StateServer" customProvider="DefaultSessionProvider" 
 cookieName="abcd" timeout="120" >
  <providers>
    <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers,
     Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" />
  </providers>
</sessionState>

私のマシンキーはこれです:

 <machineKey compatibilityMode="Framework45"      
  validationKey="702C65CF39B1ED514AC4B92326C3A84B3D88990DDF784AA0895659B528ED95F8CA0A9CD1AF5ED92A2599362684CB8D204AC30D07E6BF0CF65194A5129" 
  decryptionKey="1C49E6BA2F9423387FBC91389A0C5C8D06B61875BCE4916A40474ED"
  validation="SHA1" decryption="AES" />

私のセッション タイムアウトは 120 分で、これが Web アプリケーションで発生する理由がわかりません。ログ クラスを使用して、Web アプリケーションで何が起こっているかを確認します。

たとえば、ユーザーが別のエリアに移動したとき、またはユーザーがオンライン銀行支払いでお金を支払いたいとき、銀行ページにリダイレクトし、ユーザーが同じウィンドウで銀行から自分のサイトにリダイレクトしたとき (これを行うために別のタブまたはウィンドウを開きません)セッション ID が変更されました。

セッションにユーザーIDなどの小さなデータを保存します。

私はこの構文を使用してセッションを保存します:

HttpContext.Current.Session[System.Web.HttpContext.Current.Session.SessionID] = "abc"

次の構文で読み取ります。

var myval=HttpContext.Current.Session[System.Web.HttpContext.Current.Session.SessionID]

そのサーバーは私の設定を使用せず、それ自体が機能するようです。ファーム サーバーに何らかの構成が設定されている可能性があることを知りたいのですが、その場合、構成が使用されず、それ自体で機能しますか?

4

2 に答える 2

-1

サーバー側の状態管理では、クライアントがセッションの途中でサーバーを切り替えた場合、新しいサーバーは必ずしもクライアントの状態情報にアクセスできるとは限りません (別のサーバーに格納されているため)。サーバー側の状態管理で複数のサーバーを使用できますが、インテリジェントな負荷分散 (クライアントからの要求を常に同じサーバーに転送するため) または集中状態管理 (すべての Web サーバーがアクセスする中央データベースに状態が格納される場合) のいずれかが必要です。アクセスできます)。

  • すべての Web サーバーで同じ MachineKey を使用していることを確認してください。そうしないと、セッション データを共有できません。
  • セッションに保存するオブジェクトはシリアライズ可能である必要があります
于 2013-08-23T07:45:21.347 に答える