2010-11-18 41 views
0

我有一个使用表单身份验证的网站。问题是我在相同的生产服务器上安装了多次网站,因为我需要几个不同的登录页面(基于这种情况下的域)。在域特定的登录页面之后,网站的其余部分是相同的。显然,这需要大量的维护,因为每个新版本必须在服务器上多次安装(通过改变web.config文件中的登录页面)。选择基于自定义规则的表单身份验证的登录页面

所以我认为有一种方法可以在磁盘上的1个文件夹上安装站点,在IIS上有一个网站需要所有必需的域,并使一些http模块(或其他解决方案)为其提供该域的域和表单身份验证列表。这样可以使每个站点使用的登录页面根据域进行更改,同时仍然只有一个站点在服务器上进行维护。

感谢 达尼主治医生

回答

1

我已经看到了这一点去通过多种方式和大量的这要看你怎么有东西在安装IIS。

如果所有域都在同一个IIS网站上,最常见的解决方案是创建一个httpmodule甚至实际的.aspx页面,该页面加载配置并根据请求的URL将用户发送到正确的登录页面。如果您希望用户URL保持不变,您甚至可以执行“Server.Transfer()”。然后在web.config中,您仍然设置一个登录页面。只要确保每个其他登录页面都允许匿名用户访问。

如果所有域都是独立的IIS站点,那么我会建议在那一点上维护不同的站点副本。但真正的问题是为什么你需要不同的登录。

+0

我需要单独登录的原因是,虽然我有一个系统,我有几个合作伙伴经销商,每个想要自己登录他们卖给的客户。 – 2010-11-20 19:34:13

+0

我将使用一个登录页面来决定需要渲染哪个登录页面,并使用server.transfer来渲染该页面。 – 2010-11-20 19:34:53

+0

测试此方法后,它不起作用。我创建了一个重定向器login.aspx页面,并在其中放入了一个简单的server.transfer(“ActualLogin.aspx”)调用其中一个登录页面。起初登录失败是因为我试图将数据发布到ActualLogin.aspx,这是不允许的,因为用户还没有登录,因此ActualLoginPage.aspx因此受到表单身份验证的保护。因此,我更改了ActualLoginPage.aspx表单上的操作以提交给Login.aspx,但仍然无法正常工作,但现在我只是无法获得在浏览器上单击的登录按钮的事件 – 2010-11-21 15:43:12

0

我的工作场所有几个Web应用程序,完全按照您所描述的内容进行操作。根据情况,我们使用了几种方法。

我们使用的更常见的方法是让IIS上的所有实际站点指向相同的目录。登录逻辑获取URL,确定请求的是哪个客户端站点,并在登录时考虑到这一点。但是,实际登录页面对于所有客户端站点都是相同的,所以它只是确定要使用哪个数据库。

如果你想做比这更奇特的事情,我们使用的另一种方法是创建我们自己的MembershipProvider,在这一点上,你基本上可以做任何你想要的。如果您的类正在由ASP.NET身份验证提供程序调用(您可以将Web.config中的成员资格提供程序设置为您的提供程序),那么您应该有权访问HttpContext.Current

相关问题