2010-09-24 44 views
3

是否有一个适当的.NET解决方案用于在多个域上提供持久服务器会话?通过多个域进行ASP.NET会话

即如果一个网站的用户下www.site1.com登录时,他们也会然后记录下www.site2.com

安全是我们工作的程序的问题.. 。

谢谢!

+0

相同的应用程序,相同的服务器?完全不同的域名或只是一个不同的子域名? – 2010-09-24 15:58:43

+0

如果我记得所有解决方案都涉及SQL Server和sprocs/tables,那么会话与域/应用程序绑定。 – Lloyd 2010-09-24 16:01:38

+0

为什么人们不断试图为此做黑客攻击?只需创建一个中介“第三”服务器,您可以在一个地方处理单点登录。即site1重定向到site3(auth)上的页面,登录并重定向回站点。然后,如果该用户转到site2,它将检查site3(auth)是否有会话,如果他们这样做,则将它们登录。Session存储在site3上。就像OAuth的工作方式一样。那有什么问题? – RPM1984 2010-09-24 23:38:43

回答

0

尝试使用IIS 7.5 URL的正规主机名的URL重写功能重写2模块:Download

(这个答案依赖于这两个网址都为同一个Web应用程序hostheader项)

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

'会话'这个词在ASP.NET中可能有点令人困惑。

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

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

有关为什么我要强调的区别更多信息,检查了这一点:http://www.codeproject.com/KB/aspnet/ASPDOTNETPageLifecycle.aspx

好运。