Windows環境での分散型ドメイン間セッション共有


なぜかというと、ネット上でN編のセッション共有を探したが、本当に直接問題を解決できるのは見つからなかった.
一、以下は本人が自ら測定し、環境の不一致を防止するために、本文に曖昧さを生じさせ、環境を以下のように限定する.
1. IIS7.0
2. Asp.Netのサイト
3.StateServerモード、データベースおよびカスタム構成は本明細書で説明しない.
4.192.168.1.41(メインサイトサーバー、ドメイン名:www.xxx.com)、192.168.1.43(業務配布サーバードメイン名:BDN 1.xxx.com)
5.実装されるドメイン間もサブドメイン間の方法にすぎない.(最終的にはルートドメイン下のCookieを読み出してSessonID共有を読み出すため)
二、配置
プライマリ・サイト・サーバweb.config
1.
モードをStateServerに変更し、デフォルトではリモート・アクセスをオフにします.レジストリを開く必要があります.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters 
AllowRemoteConnectionを1に変更すると、Telnet 192.168.1.41 4242424を使用して開いているかどうかをテストできます.
2.
CookieのDomainをルートドメイン名に限定し、次のサブドメインがこのCookieにアクセスできるようにする.
また、Sessionをルートドメインの下に置くだけで、他のCookieを別途設定したい場合は、このような方法を使用することができます.
    public class MySessionIDManager : SessionIDManager, ISessionIDManager
    {
        void ISessionIDManager.SaveSessionID(HttpContext context, string id, out bool redirected, out bool cookieAdded)
        {
            base.SaveSessionID(context, id, out redirected, out cookieAdded);

            if (cookieAdded)
            {
                var name = "ASP.NET_SessionId";
                var cookie = context.Response.Cookies[name];
                cookie.Domain = "xxx.com";
                cookie.Path = "/";
            }
        }
    }
  
3.
異なる機器では不一致のSessionが発生するので、異なる機器で発生するSessionを互いに読み取ることができるようにMachineKeyを指定する必要がある.
業務配布サーバweb.config
1.
tcpip=プライマリサーバのStateServer IP.あなたも独立することができます.こちらはメインサーバーに置いてあります.
2.
3.
このmachinekeyは、プライマリ・サイト・サーバのmachinekeyと同じでなければなりません.
注:最後も肝心な点です.多くのファイルには言及されていないが、IIS設定中のサイトのIDであり、2つのサイトは同じでなければならない.プライマリ・サイトのサーバのサイトIDが3であれば、ビジネス配信サーバのサイトIDも3でなければならない.さもないと訪問できません.私はここで長い間カードを使っていた.MSDNに説明があります.