【问题标题】:Redirecting to another domain but same server重定向到另一个域但相同的服务器
【发布时间】:2010-02-21 17:48:36
【问题描述】:

我有两个域,例如 www.male.com 和 www.female.com,它们都指向同一个网站应用程序。在这个应用程序中,我有一个 HTTP 模块,它检查用户的会话是否仍然处于活动状态,如果是,则检查用户是男性还是女性。

我想检查用户从哪个域进入网站。如果用户是男性但输入(来自)www.female.com,则必须将用户重定向到 www.male.com。如果是女性,则必须相反。

其他场景有:

  • 男性用户进入www.female.com/articles/test.aspx,应该重定向到www.male.com/articles/test.aspx

  • 男性用户进入test.female.com/main/default.aspx,应该重定向到test.male.com/main/default.aspx。

我在 IIS 7.0 机器上使用 ASP.NET 3.5。

Gr

马丁

【问题讨论】:

  • 进行这些重定向的最佳方式是什么?

标签: .net asp.net iis iis-7 asp.net-3.5


【解决方案1】:

您可以使用Request.Url.Host 确定他们在哪个网站(male.com 或female.com),然后使用Response.Redirect 将他们引导到正确的网站。您可以使用 Request.Url 上的其他属性来确定用户正在查看的确切路径。

【讨论】:

  • 这是否回答了您的问题,或者我可以在其他方面提供帮助吗?
【解决方案2】:

对于浏览器而言,域是否重要是同一服务器无关紧要。 您可以在 iframe 中打开 male.com 以检查 cookie 或为两个域设置 cookie。 或使用他们的 ip 跟踪用户,但它不建议这样做。

【讨论】:

  • 我开始觉得我误解了这个问题
【解决方案3】:

最简单的方法是拥有一个公共会话服务器,两个站点都可以使用会话 ID 来获取用户信息。这样,在 female.com 上的登录可以生成会话数据,识别男性用户,然后使用包含足迹和会话 id 的查询字符串(以及传输中的短 ttl)将页面传递到 male.com。然后male.com可以识别查询字符串数据,解析,验证,快速访问会话数据。

【讨论】:

  • 为什么要使用查询字符串来传递数据。这是同一个应用程序。我没有考虑到会话绑定到域这一事实,还是我错了?
  • @Martijn B:会话实际上是绑定到一个进程的,每个网站都在一个单独的进程下运行。除非您使用单独的状态服务器并提供自定义元素以允许多个域访问公共会话,否则您将遇到数据传输问题。它们可能是相同的应用程序名称和应用程序池,但您不是在谈论应用程序设置。你说的是用户设置。这些东西保存在应用程序池之外,因此您需要能够在域之间传输这些数据。这意味着一个帖子标题或查询字符串。
  • 是的,但在我的情况下,它是在同一个进程中运行的同一个网站。它只是指向同一个网站的两个域。
  • 我知道。我在大规模生产环境中运行同样的事情。尽管它们看起来像是在同一个进程中运行,但实际上并非如此。它们分离 w3wp.exe 的单独实例以保持单独的状态。除了完整的应用程序变量之外,它们之间没有真正的内存共享。接受的答案中提到的 Request.Url 属性保留在标题中。这是“发布”的另一种方法。
  • 完全不是我所期望的。我会为此联系我的主人。谢谢!