2009-09-23 69 views
1

好的,我已经发布了一个使用表单身份验证的网站。它在我的登台服务器上工作。它在生产服务器上不起作用。唯一不同的是sql在不同的生产机器上。发布时不允许登录

该网站确实工作,显示来自sql的数据,但是当我在网站上使用登录链接时,它会调出登录表单,我登录,它重定向到主页面,它仍然表示“登录”的“注销”。

我试过aspnet_regsql来卸载/安装服务器的表单身份验证。我重新启动了www服务。这里是我的一部分web.config

<membership> 
    <providers> 
    <remove name="AspNetSqlMembershipProvider"/> 
    <add name="AspNetSqlMembershipProvider" 
     type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
     connectionStringName="LocalSqlServer" 
     enablePasswordRetrieval="true" 
     enablePasswordReset="true" 
     requiresQuestionAndAnswer="true" 
     applicationName="/TriState" 
     requiresUniqueEmail="true" 
     minRequiredPasswordLength="4" 
     minRequiredNonalphanumericCharacters="0" 
     passwordFormat="Clear" 
     maxInvalidPasswordAttempts="5" 
     passwordAttemptWindow="10" 
     passwordStrengthRegularExpression="" /> 
    </providers> 
</membership> 
+0

网站是不是在虚拟目录为/ – 2009-09-23 06:03:54

+2

我承担LocalSqlServer点定义到发布的SQL Server的连接字符串,你一直在运行aspnet_regsql针对? – 2009-10-01 15:21:37

+0

LocalSqlServer指向哪里?这是否正确的连接字符串在这种情况下使用? – 2009-10-05 19:52:34

回答

1

您如何在生产环境中创建角色和用户?你使用开发数据库的备份吗?在这种情况下请注意aspnet_Applications表。确保开发和生产环境中的应用程序名称相同。如果不是,请尝试手动编辑表格。

+0

我创建了空白数据库并运行了aspnet_regsql – 2009-09-30 10:03:14

+1

新创建的数据库没有关于应用程序,角色和用户的信息。你需要自己添加这些。最简单的方法是在Visual Studio中使用ASP.NET配置工具。 – kgiannakakis 2009-09-30 11:31:09

+0

如果您创建了一个空白数据库并运行了aspnet_regsql,那么您发布的网站使用的这个新数据库没有关于您的用户名和密码的信息。你必须添加这些信息。同样非常重要的是,如果你的应用程序有一个App_Data文件夹,请确保你删除它或至少不要发布它,因为如果你这样做了,你的应用程序将在该文件夹中创建一个数据库并尝试使用它。祝你好运!在OnSessionCreated()事件中, – 2009-10-02 02:25:25

0

是您的登录页面的任何机会名为login.aspx? 我以前遇到过这个问题,因为它会创建与登录控件相同的类名并发生冲突。在我的情况下,我得到了“死亡黄色屏幕”,即堆栈跟踪,因为它抛出了一个异常,但后来我重命名了页面,并且没问题。

+0

它是login.aspx但是...在代码后面的“类”它改为“LoginPage” – 2009-09-23 09:04:56

0

您应该明确设置您的应用程序名称。检查你的数据库中的应用程序表。如果您有两个条目,那么系统为您的开发盒和服务器使用不同的应用程序名称。如果您明确设置名称,则不会有冲突。

+0

只有一个。我使用aspnet_regsql删除了表,并将它们重新添加回来。 – 2009-09-23 09:05:28

0

应用程序是否有可能提供错误的cookie?在我们的测试服务器上,主机名与生产服务器不同,并且Cookie最终位于不同的域中。测试和生产服务器需要知道它们用来发送正确cookie的域(这是通过将名称和域存储在数据库中完成的)。

+0

我不知道。我使用标准的asp.net控件进行登录等。 – 2009-10-02 10:49:11

+0

@Rick:尝试使用LiveHTTPHeaders或Web开发人员工具使用Firefox登录,并观看HTTP标头。查找cookie标头并查看cookie的域是否与网站的域匹配。你会看到'Set-Cookie:Country = CA; Path = /; Domain = .stackoverflow.com';确保.stackoverflow.com部分正确地匹配您的生产站点的主机名和域。 – 2009-10-02 13:09:13

0

您是否尝试从登台服务器备份数据库并在生产服务器上恢复它? (here are instructions to do that.

这将确认您使用的数据库不是问题。

+0

这就是我最初做的。 – 2009-10-02 10:48:26

0

好吧,你有没有尝试做手动登录绕过会员资格检查?这将排除表单身份验证本身是问题。

 if (Request.QueryString["ReturnUrl"] != null) 
     { 
      FormsAuthentication.RedirectFromLoginPage("someuserid", false); 
     } 
     else 
     { 
      FormsAuthentication.SetAuthCookie("someuserid", false); 
      Response.Redirect("~/SomePage.aspx"); 
     } 

检查您的用户是否设置了您在授权中允许的任何角色。

<authorization> 
     <deny users="?"/> 
     <allow roles="Public"/> 
     <allow roles="AdminUser"/> 
    </authorization> 

检查是否有任何web.configs进一步下跌(从上一级文件夹继承web.configs)的允许或指定授权拒绝任何用户的角色。

0

确保您的应用程序名称是在生产数据库中的相同:

applicationName="/TriState"