2017-08-14 4 views
0

私たちは、フロントエンドと管理セクションの2つのMVC UIを持つC#MVCプロジェクトに取り組んでいます。私たちは現在、IIS Expressをローカルでデバッグするために使用しています。両方のアプリケーションをデバッグすると、セッションで共有されている両方のアプリケーションの値を見ることができます。MVCアプリケーションのセッションを分離しようとしています

私は\ CONFIG \ applicationHost.configを当社MyApp.vsを変更し、各アプリケーションのためのアプリケーションプール]セクションを追加し、それを使用するように設定し、次のように:

<sites> 
    <site name="WebSite1" id="1" serverAutoStart="true"> 
     <application path="/"> 
      <virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" /> 
     </application> 
     <bindings> 
      <binding protocol="http" bindingInformation=":8080:localhost" /> 
     </bindings> 
    </site> 
    <site name="MyApp.Frontend" id="2"> 
     <application path="/" applicationPool="MyAppFrontendAppPool"> 
      <virtualDirectory path="/" physicalPath="C:\Users\myname\Source\Repos\MyApp\MyApp.Frontend" /> 
     </application> 
     <bindings> 
      <binding protocol="http" bindingInformation="*:51415:localhost" /> 
     </bindings> 
    </site> 
    <site name="MyApp.Admin" id="5"> 
     <application path="/" applicationPool="MyAppAdminAppPool"> 
      <virtualDirectory path="/" physicalPath="C:\Users\myname\Source\Repos\MyApp\MyApp.Admin" /> 
     </application> 
     <bindings> 
      <binding protocol="http" bindingInformation="*:58534:localhost" /> 
     </bindings> 
    </site> 
    <siteDefaults> 
     <logFile logFormat="W3C" directory="%IIS_USER_HOME%\Logs" /> 
     <traceFailedRequestsLogging directory="%IIS_USER_HOME%\TraceLogFiles" enabled="true" maxLogFileSizeKB="1024" /> 
    </siteDefaults> 
    <applicationDefaults applicationPool="Clr4IntegratedAppPool" /> 
    <virtualDirectoryDefaults allowSubDirConfig="true" /> 
</sites> 

しかし、私はまだから変数を参照してください両方のアプリをセッションに追加しました。

各アプリが独自の個別のセッションで動作するようにするにはどうすればよいですか? ASP.NETで

答えて

1

セッションは、クライアント側のコンポーネント(クッキー)を有し、アプリクッキーを読み取る(したがって、セッションを復元)するための能力は、三つの要因に依存する:

  1. 能力最初にクッキーを受け取る。クッキーはドメインにバインドされているため、たとえば、両方のサイトがlocalhost上で実行されている場合、それぞれはお互いのCookieを受け取ります。しかし、foo.comとbar.comに配備されていれば、これは問題ではありません。

  2. クッキーを復号化する能力。これは、アプリに使用されているマシンキーによって制御されます。デフォルトでは、ASP.NETはシステム用の単一のマシンキーを生成し、すべてのマシンキーを使用します。これにより、そのマシン上のすべてのアプリケーションは互いのCookieを読み取ることができます。これを無効にするには、各アプリケーションに明示的かつ別個のマシンキーを与える必要があります。

  3. 最後に、クッキー名。セッション状態を永続化するために使用されるCookieは、アプリケーションごとにカスタマイズできますが、標準名はASP.NET_SessionIdです。明らかに、両方のサイトがセッションに同じCookie名を使用している場合、基本的にそれらのサイトを共有します。したがって、アプリケーションのセッションを分離する最も直接的な方法は、それぞれに固有のセッションCookie名を割り当てることです。

    <system.web> 
        <sessionState cookieName="foo" /> 
    </system.web> 
    
関連する問題