サブドメインでのセッションの共有に問題があります。アクセスできるアプリケーションがあります
私は次のように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>
誰かが私を助けてくれることを願っています。
よろしく