1

asp.netに2つのWebアプリケーションと1つのWebサービスアプリケーションがあります(すべてのホストは同じサーバーにありますが、すべてドメインが異なります)(例:1番目のアプリの場合は213.74.99.50:9090、2番目のアプリの場合は213.74.99.50:9091、213.74. Web サービスの場合は 99.50:9093)

すべてのアプリケーションで同じセッションを使用したい。

最初の Web アプリでログインし、次に 2 番目のアプリで Web サービスからログイン データを取得します。

私はStateServerモードを使用しています.machinekeysに同じキーを使用しています.global.asaxでもすべてのアプリ名を同じにします.

インターネットエクスプローラーでは問題ありません。すべてが正常に動作します。すべてのアプリケーションで同じセッションを使用できます。

しかし、これを chrome または firefox で試すときは、「Access-Control-Allow-Origin=*」を使用する必要があります。

しかし、これは Web サービスでは機能しません。Web アプリケーションは、それらの間で同じセッションを使用します。Bur Web サービスは、Chrome と Firefox で同じセッションを使用できません。

これは私のコードです: 最初のアプリケーションでセッションを保存します。

 protected void Button1_Click(object sender, EventArgs e)
    {
        Session["deneme"] = TextBox1.Text;

        Label1.Text = Session.SessionID;
    }

2 番目のアプリケーションでセッションを読み取る

 protected void Button1_Click(object sender, EventArgs e)
            {
                Label1.Text = Session["deneme"]!=null?Session["deneme"].ToString():"yok";
                Label2.Text = Session.SessionID;
            }

Web サービスとのリターン セッション

  [WebService(Namespace = "http://tempuri.org/")]
        [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
        [System.ComponentModel.ToolboxItem(false)]
        [ScriptService]
        public class SesDeneme : System.Web.Services.WebService
        {

            [WebMethod(EnableSession = true)]
            public string HelloWorld()
            {

                return (Session["deneme"] != null ? Session["deneme"].ToString() : "yok") + "____" + Session.SessionID;

            }
        }

異なるアプリケーションで同じセッションを使用するために、すべてのアプリの Web 構成も変更します。

<sessionState mode="StateServer"
                  cookieName="SCS_01"
   stateConnectionString="tcpip=localhost:42424"
   cookieless="false"
   timeout="20"/>



    <machineKey decryption="Auto"
                decryptionKey="XXXX"
                validation="SHA1"
                validationKey="YYYY" /> 

そして、すべてのアプリ名を global.asax と同じにします

protected void Application_Start(object sender, EventArgs e)
            {
                string applicationName = "MySiteName";

                            FieldInfo runtimeInfo = typeof(HttpRuntime).GetField("_theRuntime", BindingFlags.Static | BindingFlags.NonPublic);
                HttpRuntime theRuntime = (HttpRuntime)runtimeInfo.GetValue(null);
                FieldInfo appNameInfo = typeof(HttpRuntime).GetField("_appDomainAppId", BindingFlags.Instance | BindingFlags.NonPublic);

                appNameInfo.SetValue(theRuntime, applicationName);
            }

結局のところ、Internet Explorer のすべてのアプリケーションで同じセッションを使用できます。

しかし、FirefoxとChromeを使用して、すべてのアプリのWeb構成も追加します

<customHeaders>
     <add name="Access-Control-Allow-Origin" value="*" />
     <add name="Access-Control-Allow-Headers" value="Content-Type" />
</customHeaders>

このようにして、Web アプリケーションで同じセッションを使用できますが、Web サービスでは機能しません。

この問題を解決する方法はありますか

私は何かに気づきました。(Web アプリケーションからではなく) Chrome から直接 Web サービスを呼び出すと、セッションは正常に機能します。しかし、jquery.ajax メソッドから webservice を呼び出すと、セッションに到達できません。

クロムで異なるCookieキーを使用するJquery ajaxだと思います。

4

0 に答える 0