0

サブドメインでのセッションの共有に問題があります。アクセスできるアプリケーションがあります

私は次のようにweb.configファイルを設定しました:

<httpCookies domain=".myapplication.com"/>
<authentication mode="Forms">
<forms loginUrl="index.aspx" cookieless="UseCookies" timeout="60000" enableCrossAppRedirects="true" domain=".myapplication.com"/>
</authentication>

「enableCrossAppRedirects」はtrueまたはfalseに設定でき、何も変更されません。

IEでは、サブドメインから別のサブドメインに切り替えるときは、常に同じセッションを使用します。しかし、Firefoxでは、サブドメインを変更するたびに、それぞれに新しいセッションが作成されます。

私はグーグルでたくさんの記事を読みましたが、何も機能しません。Firefoxが違う理由がわかりません

これは、自分でテストするための単純なaspxコードページです。

<%@ Import NameSpace="System" %>
<%@ Import NameSpace="System.Linq" %>
<%@ Import NameSpace="System.Data" %>
<%@ Import NameSpace="System.Configuration" %>
<%@ Import NameSpace="System.Collections" %>
<%@ Import NameSpace="System.Collections.Generic" %>
<%@ Import NameSpace="System.Web" %>
<%@ Import NameSpace="System.Web.Security" %>
<%@ Import NameSpace="System.Web.UI" %>
<%@ Import NameSpace="System.Web.UI.WebControls" %>
<%@ Import NameSpace="System.Web.UI.WebControls.WebParts" %>
<%@ Import NameSpace="System.Web.UI.HtmlControls" %>
<%@ Import NameSpace="System.Reflection" %>
<%@ Import NameSpace="System.Web.SessionState" %>
<script language="c#" runat="server">

public void Page_Load(object sender, EventArgs e)
{
Log("<b>Refresh twice to see result after switch to another subdomain</b>");
if (Session["CREATION"] == null)
{
string navigateur = HttpContext.Current.Request.ServerVariables["HTTP_USER_AGENT"].ToString    ();
if (navigateur.ToUpper().Contains("FIREFOX"))
{
navigateur = "Firefox";
}
else if (navigateur.ToUpper().Contains("MSIE"))
{
navigateur = "Internet Explorer";
}

Session["CREATION"] = "Session create at " + DateTime.Now.ToString("hh:mm:ss") + " by "     +      navigateur;  
}
Session["HOST"] = Request.Headers["HOST"];
Session["SESSIONID"] = Session.SessionID;
CheckSession();
}
private void Log(string text)
{
Label1.Text += text + "<br/>";
}
public void CheckSession()
{
object obj = typeof(HttpRuntime).GetProperty("CacheInternal", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null, null);   
object[] obj2 = (object[])obj.GetType().GetField("_caches", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(obj);
for (int i = 0; i < obj2.Length; i++)
{
Hashtable c2 = (Hashtable)obj2[i].GetType().GetField("_entries", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(obj2[i]);
foreach (DictionaryEntry entry in c2)
{

object o1 = entry.Value.GetType().GetProperty("Value", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(entry.Value, null);
if (o1.GetType().ToString() == "System.Web.SessionState.InProcSessionState")
{
Log("<hr/>");
SessionStateItemCollection sess = (SessionStateItemCollection)o1.GetType().GetField("_sessionItems", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(o1);                
if (sess != null)
{
foreach (string key in sess.Keys)
{
Label1.Text += key + " = " + sess[key] + "<br>";
}

}
}
}
}

}
</script>

<html>
<body>
<form id="form1" runat="server">

<asp:Label id="Label1" runat="server"/>
</form>
</body>
</html>

誰かが私を助けてくれることを願っています。

よろしく

4

1 に答える 1

0

設定で、ドメインから最初のドットを削除します。そして、あなたのコードは次のようになります:

<httpCookies domain="myapplication.com"/>
<authentication mode="Forms">
<forms loginUrl="index.aspx" cookieless="UseCookies" timeout="60000" 
      enableCrossAppRedirects="true" domain="myapplication.com"/>
</authentication>

このドットを使用すると、サブドメインが Cookie を読み取って新しい Cookie を作成できなくなります。

于 2012-09-26T21:21:25.787 に答える