7

我在 IIS 上的不同虚拟目录上设置了两个相同的应用程序(我已经做了一些解决方法以确保它们都具有相同的应用程序名称)。有没有办法在两个 asp.net Web 应用程序之间共享会话 ID?

由于我将会话存储在 StateServer 中,因此它们都应该获得相同的会话数据,但是,每次我从应用程序 a 转到应用程序 b 时,都会创建不同的会话 ID。这不会在负载平衡场景中发生吗?当我去 www.test.com 时,它会将该请求重定向到服务器 a,然后如果我再次点击它,它将转到服务器 b,但由于它是一个不同的 Web 应用程序,它会创建一个新的会话 ID ?

4

3 回答 3

7

首先,在 web.config 中配置 sessionState 元素以在两个应用程序中使用 cookieName="SOME_COOKIE_NAME_HERE"。

然后,只需确保 url 具有相同的 TLD(顶级域),即 app1.mydomain.com 和 app2.mydomain.com,您应该能够处理 Global.asax 中的 Session_Start 事件并输入以下代码:

    HttpCookie cookie = new HttpCookie("SOME_COOKIE_NAME_HERE", Session.SessionID.ToString());
    cookie.Expires = DateTime.Now.AddMinutes(20);
    cookie.Domain = "*.mydomain.com";
    cookie.HttpOnly = true;
    Response.SetCookie(cookie);

另外,我建议您使用 SqlServer SessionState 模式。

于 2010-07-09T19:18:37.297 回答
1

最初我面临同样的问题。我所做的是,我覆盖了每个域的 jsession id。我的意思是,如果用户登陆 domain1.com,请从 iframe 为 domain2.com 设置相同的会话 ID。反之亦然。有了这个,您可以跨多个域维护相同的会话。

您需要使用负载均衡器通过网络测试对多台服务器的影响。

于 2013-07-23T10:03:21.680 回答
-1

您的目标是在 2 个应用程序之间共享会话状态,而不仅仅是会话 ID?我相信 StateServer 还使用应用程序路径以及 SessionID 来存储数据,因此即使 SessionID 相同,您仍然无法共享数据。您可能必须编写自己的会话模块。

负载平衡 Web 应用程序没有这个问题,因为应用程序路径在集群成员之间是相同的。

于 2010-07-09T19:13:21.030 回答