2012-03-02 139 views
1

同じセッション(http://web1.localとhttp://web2.local)を持つ2つのドメインで実行するには、ASP.NET 4.0アプリケーション(Cookie経由のセッションID)のSessionIDを変更する必要があります。これにより、アイテムは2つのドメインの同期に維持されます。ASP.NET変更SessionID

このため、ページには新しいセッションIDを設定する必要がある「setkey.aspx/ashx」のiframeがあります。

<iframe src="http://web1.local/SetKey.aspx?sid=<%=Session.SessionID%>" width="250" height="100"></iframe> 
<iframe src="http://web2.local/SetKey.aspx?sid=<%=Session.SessionID%>" width="250" height="100"></iframe> 

セッションでは、セッションが既に埋め込まれているため、SessionIDは同じBroeserからのいくつかのリクエストを介して静的に保持されます。

私は、主にSessionIDManager.SaveSessionIDを使用するいくつかの投稿を見つけましたが、私はそれらのどれも働かなくてもかまいませんでした。

このコードは見つかりましたが、どこから呼び出す必要がありますか? (Global.asaxの/ default.aspxを/ setjey.aspx/ASHX?)

Dim Redirected As Boolean = False 
Dim Added As Boolean = False 

Dim SID = Request.QueryString("sid") 
If Not String.IsNullOrEmpty(SID) AndAlso SID.Length = 24 Then 
    Dim SM As New SessionIDManager 
    SM.InitializeRequest(HttpContext.Current, False, True) 
    SM.RemoveSessionID(HttpContext.Current) 
    SM.SaveSessionID(HttpContext.Current, SID, Redirected, Added) 
End If 

誰もが正常に実行するには、このコードを持っていましたか?

+0

SQL State Serverをオプションとしますか? http://support.microsoft.com/kb/317604 –

+0

こんにちは、SQL Serverは多くのパフォーマンスを犠牲にしています。 – Christoph

答えて

0

私は単にGlobal.asaxのApplication_EndRequestハンドラにクッキーを設定しようとしましたが、それは動作します。ここにC#がありますが、あなたはそのアイデアを得るでしょう...

void Application_EndRequest(object sender, EventArgs e) 
{ 
    var ctx = HttpContext.Current; 
    ctx.Response.Cookies.Remove("ASP.NET_SessionId"); 
    ctx.Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ctx.Request.QueryString("sid"))); 
} 
+0

EndRequestが私が試した唯一のメトスでした:-)ありがとう! – Christoph

+0

Chrome、Firefox、Safari、Operaで動作していますが、IE9では使用できません:-( – Christoph

+0

Mmm ...私の推測では、IEは読み取り専用になっています。 = "SessoinID"をweb.configファイルの ''タグに追加してくださいIEで修正されるはずです – Diego