Asp.net LoginView在帐户文件夹中工作,而不是在网站的根文件夹中

Asp.net LoginView在帐户文件夹中工作,而不是在网站的根文件夹中,asp.net,authentication,account,loginview,Asp.net,Authentication,Account,Loginview,我一直在互联网上搜索我的问题的答案,并阅读了ASP.Net控件、安全和身份验证上的msdn站点,但要么找不到答案,要么错过了我阅读的所有信息 我正在ASP.NETV2.0中构建一个网站,该网站将托管在远程服务器上。我使用MySQL作为后端,它也包含用户表。我使用了与默认成员资格表相同的用户表结构。应用程序中的文件夹都具有分配给它们的默认角色权限 以下问题发生在我在本地计算机上的测试中 当我使用~/Account/login.aspx页面登录用户时,我会将用户重定向到~/Account/Accou

我一直在互联网上搜索我的问题的答案,并阅读了ASP.Net控件、安全和身份验证上的msdn站点,但要么找不到答案,要么错过了我阅读的所有信息

我正在ASP.NETV2.0中构建一个网站,该网站将托管在远程服务器上。我使用MySQL作为后端,它也包含用户表。我使用了与默认成员资格表相同的用户表结构。应用程序中的文件夹都具有分配给它们的默认角色权限

以下问题发生在我在本地计算机上的测试中

当我使用
~/Account/login.aspx
页面登录用户时,我会将用户重定向到
~/Account/AccountDetails.aspx
,其中包含
登录视图。登录后,用户名在此页面上的
LoginView
中可见,并且经过身份验证

然后,当我转到
~/Default.aspx
,并对
LoginView
使用相同的代码时,用户名不会显示,它们也不再经过身份验证

我不想创建多个页面来显示相同的数据,因为登录用户和匿名用户都需要在
~/Default.aspx
页面中看到相同的信息。我只是希望显示用户已登录到
Default.aspx
页面或
~/
文件夹中的任何页面

我知道这将是一个简单的设置或改变,需要像一个角色或成员或什么的,但我不能弄清楚

我查看了stackoverflow,发现了很多
LoginView
问题,但似乎找不到一个能回答我问题的问题

我希望有人能给我指出正确的方向

以下是
Default.aspx
AccountDetails.aspx
页面上使用的代码。它是模板ASP.Net
网站应用程序中的默认
LoginView
代码

<div class="loginDisplay">
  User Authenticated? <%= Page.User.Identity.IsAuthenticated %>
  <asp:LoginView ID="HeadLoginView" runat="server">
    <AnonymousTemplate>
      [ <a href="~/Account/Login.aspx" ID="HeadLoginStatus" runat="server">Log In</a> ]
    </AnonymousTemplate>
    <LoggedInTemplate>
      Welcome <span class="bold"><asp:LoginName ID="HeadLoginName" runat="server" /></span>!
      [ <asp:LoginStatus ID="HeadLoginStatus" runat="server" LogoutAction="Redirect" LogoutText="Log Out" LogoutPageUrl="~/"/> ]
    </LoggedInTemplate>
  </asp:LoginView>
</div>  
~/web.config
文件包含以下信息。我已经编辑了用户名和密码的一些值。我还删除了注释行

<?xml version="1.0"?>  
<configuration>  
  <connectionStrings>  
    <add name="MySqlMembershipConnection" connectionString="Data Source=mydatasource;user id=dotnet;password=dotnet;" providerName="MySql.Data.MySqlClient" />    
    <add name="mycs" connectionString="Dsn=mydsn" providerName="System.Data.Odbc" />    
    <remove name="LocalMySqlServer" />    
    <add name="LocalMySqlServer" connectionString="database=mydsn;server=localhost;User Id=dotnet;password=dotnet" providerName="MySql.Data.MySqlClient" />    
  </connectionStrings>    
  <system.web>    
    <sessionState mode="Custom" cookieless="false" regenerateExpiredSessionId="true" customProvider="MySqlSessionStateProvider">    
      <providers>    
        <add name="MySqlSessionStateProvider" type="MySql.Web.SessionState.MySqlSessionStateStore, MySql.Web, Version=6.4.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" applicationName="/" description="" connectionStringName="LocalMySqlServer" writeExceptionsToEventLog="False" autogenerateschema="True" />    
      </providers>    
    </sessionState>    
    <authentication mode="Forms">    
      <forms loginUrl="~/Account/Login.aspx" timeout="30" name=".ASPXFORM$" path="~/" requireSSL="false" slidingExpiration="true" defaultUrl="~/Default.aspx" enableCrossAppRedirects="false" />    
    </authentication>    
    <membership defaultProvider="MySQLMembershipProvider">    
      <providers>    
        <clear />    
        <remove name="MySQLMembershipProvider" />    
        <add name="MySQLMembershipProvider" type="MySql.Web.Security.MySQLMembershipProvider, MySql.Web, Version=6.4.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" applicationName="/" description="mydescription" connectionStringName="LocalMySqlServer" writeExceptionsToEventLog="False" autogenerateschema="True" enablePasswordRetrieval="False" enablePasswordReset="True" requiresQuestionAndAnswer="True" requiresUniqueEmail="False" passwordFormat="Clear" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression="" />    
      </providers>    
    </membership>    
    <profile defaultProvider="MySQLProfileProvider">    
      <providers>    
        <clear />    
        <remove name="MySQLProfileProvider" />    
        <add name="MySQLProfileProvider" type="MySql.Web.Profile.MySQLProfileProvider, MySql.Web, Version=6.4.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" applicationName="/" description="" connectionStringName="LocalMySqlServer" writeExceptionsToEventLog="False" autogenerateschema="True" />    
      </providers>    
    </profile>    
    <roleManager enabled="true" defaultProvider="MySQLRoleProvider">    
      <providers>    
        <clear />    
        <add applicationName="/" name="AspNetWindowsTokenRoleProvider"
      type="System.Web.Security.WindowsTokenRoleProvider" />    
        <add applicationName="/" description="" connectionStringName="LocalMySqlServer"
      writeExceptionsToEventLog="False" autogenerateschema="True"
      name="MySQLRoleProvider" type="MySql.Web.Security.MySQLRoleProvider, MySql.Web, Version=6.4.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />    
      </providers>    
    </roleManager>    
    <customErrors mode="Off" />    
    <compilation debug="true" />    
  </system.web>    

  <system.net>    
    <mailSettings>    
      <smtp from="user@domain.com">    
        <network host="mail.domain.com" password="mypassword" userName="myusername" />    
      </smtp>    
    </mailSettings>    
  </system.net>    

  <system.webServer>    
    <modules runAllManagedModulesForAllRequests="true" />    
  </system.webServer>    

</configuration>    

所以经过多次测试,我找到了问题所在。首先,我有三个连接字符串,一个用于数据,两个用于表单身份验证。我将两种形式的身份验证连接字符串组合成一个连接字符串。这允许我有一个用于数据的连接字符串和一个用于身份验证的连接字符串

接下来,我想找出我的问题发生在哪里,所以我在VS2010中创建了一个新的空白
ASP.NET
网站,然后逐步添加,以支持
MySQL
。首先添加MySQL数据和Web引用,然后添加连接字符串,最后添加表单身份验证

我在system.web authentication元素中的forms元素中注意到,它只包含loginURL和timeout属性,因此我通过为forms元素添加其他属性来测试应用程序,直到找到导致问题的属性


在“我的表单”元素中,路径属性设置为“~/”。当我将其更改为“/”时,应用程序开始正常工作。

您不能共享web.config中配置的内容吗?授权标签上写着什么?您好,这是ASP.NET网站模板附带的标准web.config设置。您能在根文件夹中给我一个web.config的快照吗?它包含授权标签吗?也看看这个。这显示了一个非常基本的表单AuthenticationHi,谢谢你的链接,但不幸的是,它不能解决我的问题。我在目录中已经有了上面列出的web.config文件,并且正在使用ASP.Net控件来授权用户,而不是C#code。我应该用MSDN页面上列出的C代码替换控件吗?这是我希望避免的事情。
<?xml version="1.0"?>  
<configuration>  
  <connectionStrings>  
    <add name="MySqlMembershipConnection" connectionString="Data Source=mydatasource;user id=dotnet;password=dotnet;" providerName="MySql.Data.MySqlClient" />    
    <add name="mycs" connectionString="Dsn=mydsn" providerName="System.Data.Odbc" />    
    <remove name="LocalMySqlServer" />    
    <add name="LocalMySqlServer" connectionString="database=mydsn;server=localhost;User Id=dotnet;password=dotnet" providerName="MySql.Data.MySqlClient" />    
  </connectionStrings>    
  <system.web>    
    <sessionState mode="Custom" cookieless="false" regenerateExpiredSessionId="true" customProvider="MySqlSessionStateProvider">    
      <providers>    
        <add name="MySqlSessionStateProvider" type="MySql.Web.SessionState.MySqlSessionStateStore, MySql.Web, Version=6.4.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" applicationName="/" description="" connectionStringName="LocalMySqlServer" writeExceptionsToEventLog="False" autogenerateschema="True" />    
      </providers>    
    </sessionState>    
    <authentication mode="Forms">    
      <forms loginUrl="~/Account/Login.aspx" timeout="30" name=".ASPXFORM$" path="~/" requireSSL="false" slidingExpiration="true" defaultUrl="~/Default.aspx" enableCrossAppRedirects="false" />    
    </authentication>    
    <membership defaultProvider="MySQLMembershipProvider">    
      <providers>    
        <clear />    
        <remove name="MySQLMembershipProvider" />    
        <add name="MySQLMembershipProvider" type="MySql.Web.Security.MySQLMembershipProvider, MySql.Web, Version=6.4.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" applicationName="/" description="mydescription" connectionStringName="LocalMySqlServer" writeExceptionsToEventLog="False" autogenerateschema="True" enablePasswordRetrieval="False" enablePasswordReset="True" requiresQuestionAndAnswer="True" requiresUniqueEmail="False" passwordFormat="Clear" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression="" />    
      </providers>    
    </membership>    
    <profile defaultProvider="MySQLProfileProvider">    
      <providers>    
        <clear />    
        <remove name="MySQLProfileProvider" />    
        <add name="MySQLProfileProvider" type="MySql.Web.Profile.MySQLProfileProvider, MySql.Web, Version=6.4.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" applicationName="/" description="" connectionStringName="LocalMySqlServer" writeExceptionsToEventLog="False" autogenerateschema="True" />    
      </providers>    
    </profile>    
    <roleManager enabled="true" defaultProvider="MySQLRoleProvider">    
      <providers>    
        <clear />    
        <add applicationName="/" name="AspNetWindowsTokenRoleProvider"
      type="System.Web.Security.WindowsTokenRoleProvider" />    
        <add applicationName="/" description="" connectionStringName="LocalMySqlServer"
      writeExceptionsToEventLog="False" autogenerateschema="True"
      name="MySQLRoleProvider" type="MySql.Web.Security.MySQLRoleProvider, MySql.Web, Version=6.4.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />    
      </providers>    
    </roleManager>    
    <customErrors mode="Off" />    
    <compilation debug="true" />    
  </system.web>    

  <system.net>    
    <mailSettings>    
      <smtp from="user@domain.com">    
        <network host="mail.domain.com" password="mypassword" userName="myusername" />    
      </smtp>    
    </mailSettings>    
  </system.net>    

  <system.webServer>    
    <modules runAllManagedModulesForAllRequests="true" />    
  </system.webServer>    

</configuration>