多个域上的ASP.NET会话

3

是否有适合的.NET解决方案,可以在多个域上提供持久的服务器会话?

例如,如果网站用户在www.site1.com下登录,则他们也将在www.site2.com下登录。

安全性是我们正在处理的程序中的一个问题...

谢谢!


同一个应用程序,同一个服务器?完全不同的域名还是只是不同的子域名? - Josh Stodola
如果我没记错的话,会话与域/应用程序绑定,并且所有解决方案都涉及到对SQL Server进行一些骚操作,包括存储过程和表格。 - Lloyd
为什么人们总是试图对此进行黑客攻击?只需创建一个中间的“第三”服务器,在其中可以在一个地方处理单点登录。例如,site1 重定向到 site3 上的页面(auth),登录后再重定向回 site。然后,如果该用户转到 site2,则它会检查 site3(auth)是否有会话,如果有,则将其登录。会话存储在 site3 上。就像 OAuth 的工作原理一样。这有什么问题吗? - RPM1984
4个回答

1

如果您想开始而不是入侵ASPState数据库(虽然可能,但我不建议这样做),您可以从这里开始:http://www.codeproject.com/KB/session/sharedsession.aspx

基本上,您可以使用反射将AppDomain设置为www.site1.com和www.site2.com相同。

您还可能需要AppPath,我们需要它,但我们的设置与您的略有不同。我们添加了:

        FieldInfo appDomainInfo = typeof(HttpRuntime).GetField("_appDomainId", BindingFlags.Instance | BindingFlags.NonPublic);
        appDomainInfo.SetValue(theRuntime, "/LM/W3SVC/1/ROOT/A_Website_Name_Here");

1

1

在ASP.NET中,“session”这个词可能会让人有点困惑。

如果您正在谈论安全性(身份验证和授权),那么您可能正在寻找单点登录解决方案。换句话说,当用户登录一个站点时,他们不会被提示登录到另一个相关站点。请查看Windows Identity Foundation、OAuth、Jasig CAS等。CAS是我首选的解决方案(我是.NET客户端的开发人员),但服务器是用Java编写的,您需要一些Java专业知识来配置它。

在ASP.NET中,会话状态是与身份验证和授权完全分离的组件(尽管它可能取决于身份验证步骤的结果)。如果您正在尝试在两个站点之间共享信息(例如购物车内容),则可以将两个域都配置为使用相同的数据库作为会话提供程序(google aspnet_regsql -ssadd),或者只需将数据存储在可由两者访问的数据库中。

有关我强调区别的更多信息,请查看此处:http://www.codeproject.com/KB/aspnet/ASPDOTNETPageLifecycle.aspx

祝你好运。


0

尝试使用IIS 7.5 Url Rewrite 2模块的规范主机名URL重写功能:下载

(此答案依赖于两个URL都具有相同Web应用程序的主机标头条目)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接