2009-09-23 68 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"