6

刚刚有一个关于 ASP .NET 中的会话管理的问题。我查看了 IIS 中的 3 个选项(InProc、StateServer 和 SQL Server),并且在跨多个服务器和多个 Web 应用程序部署会话持久性时遇到了问题。是否有任何其他选项可用于管理跨子域(来自同一个父域)以及每个域下的多个 Web 应用程序的会话?

我给你举个例子:想象一个网站 www.thisismysite.com.au。当我登录时,我会访问 login.thisismysite.com.au。通过浏览该站点,我访问了 www.thisismysite.com.au/MyWebApp/。我想要实现的是让会话在所有三个链接中持续存在。我知道有一个第三方工具可以做到这一点,Groat SessionFarm,但我想知道是否还有其他工具?此外,如果这有什么不同的话,可以混合使用 SSL/非 SSL。

注意:我不担心身份,我可以实施 Windows Identity Foundation(或类似的)并在所有三个地方发送声明。我在会话持久性之后。

非常感谢,李

编辑: 我最终使用了我们可以为我们的目的定制的第三方代码。完美运行,在购买源代码时,我们可以根据需要对其进行更新。

4

5 回答 5

1

SQL Server 中的状态服务器或存储应该可以正常工作 - 即使跨多个应用程序,但您必须记住所有应用程序必须具有相同的 MachineKey。

ASPNET 负载平衡和 ASPNET 状态服务器

高温高压

于 2012-02-21T21:27:58.037 回答
0

听起来您可能想要的是分布式缓存?

这篇文章可能会为您提供一些选择 - ASP.NET Web App 的分布式缓存/会话解决方案

我对该领域有点陌生,但我正在努力在我当前的 MVC/ASP.NET 项目中使用 Microsoft Azure 的 AppFabric 缓存来处理会话状态,因为 Azure Web 应用程序本身并没有为会话状态提供好的选项。

我相信上面提到的帖子中的链接类似于 Azure 的 AppFabric 缓存,并且也可以处理会话状态。不过,我没有与他们中的任何一个合作过,所以不能保证可靠性。这个周末我也在自己的应用程序中开始这方面的工作。

格雷格

于 2011-08-08T02:04:30.680 回答
0

一种选择是通过 SQL Server 管理会话状态,或者您可以查看 NCache 之类的东西来管理跨多个服务器的状态。

于 2011-08-08T16:40:53.753 回答
0

状态服务器或 SQL 服务器应该可以工作。至少对于http。Https 请求可能需要在同一个 IP 上结束......对此不确定。

您还可以使用维护会话的硬件负载平衡器/交换机。它们将来自用户的初始请求发送到服务器,来自该用户的下一个请求总是发送到同一服务器。(或者他们试图)

那是为了只为一个 Web 应用程序共享会话,但为了在应用程序之间共享会话,我在工作中所做的是使用经典的 asp 会话(用于旧版支持,但 asp.net 也有效),当用户登录时,它们是在 asp 上创建,它们从名为 sessions.asp 的文件中读取(名称无关紧要),当从 .net 执行 Web 请求时,该文件返回值。

例如:sessions.asp?session_name=username 从任何本地 .net 应用程序调用并响应“John”因此,“John”在 session["session_name"] 和 session.asp(或 aspx、php 或任何你想要的)内只是将文本写入响应。

我不确定它是否解释清楚......这是一种肮脏而简单的方法。在我的公司,我们为大约 300 个并发用户使用它,每个用户都有大量的会话,并且似乎工作得很好。希望能帮助到你。;-)

于 2012-01-05T01:16:16.587 回答
-1

使用缓存而不是会话来处理多个 Web 应用程序的直接方式之一。

在这种情况下,缓存键将是用户 ID 和用户位置 IP 的组合。由于默认情况下缓存永远不会过期,因此您必须了解缓存持续时间

int timeout=20;
string key= userid+System.Web.HttpContext.CurrentRequest.ServerVariables("REMOTE_ADDR");

//Set 
Cache.Insert(key, value, null,  DateTime.Now.AddMinutes(timeout), Cache.NoSlidingExpiration);    

//Get
var value=Cache[key];

在注销期间不要忘记删除缓存

Cache.Remove(key);
于 2012-01-05T13:28:13.963 回答