C# 表单身份验证在本地工作,但不在dev服务器上工作

C# 表单身份验证在本地工作,但不在dev服务器上工作,c#,asp.net-mvc,iis,asp.net-mvc-5,forms-authentication,C#,Asp.net Mvc,Iis,Asp.net Mvc 5,Forms Authentication,我知道表单身份验证很旧,但当我使用IIS Express在本地运行web应用程序时,一切都很好。但当我将其发布到开发/测试服务器时,它只是重新加载页面。开发服务器正在运行IIS 6 还要注意的是,它在本地以localhost:50264/Login运行。在dev服务器上,url更像 我注意到两个cookie都有路径“/”。我确实尝试通过在本地web.config中设置以下内容来设置更改: <add key="CookiePath" value="/" /> 当我部署到dev服务器

我知道表单身份验证很旧,但当我使用IIS Express在本地运行web应用程序时,一切都很好。但当我将其发布到开发/测试服务器时,它只是重新加载页面。开发服务器正在运行IIS 6

还要注意的是,它在本地以localhost:50264/Login运行。在dev服务器上,url更像

我注意到两个cookie都有路径“/”。我确实尝试通过在本地web.config中设置以下内容来设置更改:

<add key="CookiePath" value="/" /> 
当我部署到dev服务器时,我检查了那里的web.config,它正确地转换了forms节点


当我进入登录时,我输入我的凭证,它仍然刷新登录页面。使用Chrome扩展名“EditThisCookie”,我仍然可以看到cookie的路径是“/”。它根本没有意识到变化。即使我手动将authTicket path的路径设置为“/op”,cookie的路径仍然是“/”。我不知道发生了什么事。呃…

我也使用表单身份验证,这是我的设置。您没有显示所有表单身份验证代码,但希望这将为您指明正确的方向

Web.Config

<authentication mode="Forms">
  <forms loginUrl="members/login.aspx" name=".ASPXFORMSAUTH" requireSSL="false" slidingExpiration="true" timeout="120" />
</authentication>
然后我测试它们是否在所有需要用户登录的页面上都经过身份验证

    If Request.IsAuthenticated Then
        Dim ident As FormsIdentity = CType(User.Identity, FormsIdentity)
        If ident IsNot Nothing Then

            Dim ticket As FormsAuthenticationTicket = ident.Ticket
            Dim userDataString As String = ticket.UserData

            Select Case ticket.UserData
                Case "Member"
                    m_MemberLoggedIn = ident.Name
                Case Else
                    Response.Redirect("~/members/login/", True)
            End Select


        Else
            Response.Redirect("~/members/login/", True)
        End If
9/29更新:


检查以确保IIS身份验证模式设置为匿名

我也使用表单身份验证,以下是我的设置。您没有显示所有表单身份验证代码,但希望这将为您指明正确的方向

Web.Config

<authentication mode="Forms">
  <forms loginUrl="members/login.aspx" name=".ASPXFORMSAUTH" requireSSL="false" slidingExpiration="true" timeout="120" />
</authentication>
然后我测试它们是否在所有需要用户登录的页面上都经过身份验证

    If Request.IsAuthenticated Then
        Dim ident As FormsIdentity = CType(User.Identity, FormsIdentity)
        If ident IsNot Nothing Then

            Dim ticket As FormsAuthenticationTicket = ident.Ticket
            Dim userDataString As String = ticket.UserData

            Select Case ticket.UserData
                Case "Member"
                    m_MemberLoggedIn = ident.Name
                Case Else
                    Response.Redirect("~/members/login/", True)
            End Select


        Else
            Response.Redirect("~/members/login/", True)
        End If
9/29更新:



检查以确保将IIS身份验证模式设置为匿名

我采取了简单的方法,要求我们的IT部门创建一个子域,以便cookie的路径始终为“/”。不是答案,但我就是这么做的。

我用简单的方法让我们的it部门创建一个子域,以便cookie的路径始终为“/”。不是答案,但我就是这么做的。

什么是
CookiePath
?它与表单cookie的关系如何?它看起来不像是内置基础设施的一部分。无论它是本地的还是在开发服务器上,它都有正确的域,但路径始终是“/”您在这里看到的是从
appSettings
部分删除的内容。我想告诉你的是,没有一种内置的机制,这种任意设置与表单身份验证相关。什么是
CookiePath
?它与表单cookie的关系如何?它看起来不像是内置基础设施的一部分。无论它是本地的还是在开发服务器上,它都有正确的域,但路径始终是“/”您在这里看到的是从
appSettings
部分删除的内容。我想告诉你的是,没有任何内置机制可以让这种任意设置与表单身份验证相关。因为你似乎在使用WebForms,这里有一个指向WebForms授权上的文档的链接。每个页面都没有检查,只是需要授权的页面(表单身份验证就是这样工作的)。OP的问题是关于表单身份验证和他面临的问题。这不是一个关于如何处理身份验证的最佳方法的问题,这将是一个漫长的讨论。我对web配置和身份验证票证进行了更改,但这对开发服务器没有任何帮助。@henry,这就是为什么我评论您的答案,而不是回答OP的问题。你的回答促进了糟糕的方法,因为你似乎要重做一些现成的东西。在我15年的企业asp.net编码生涯中,我从来没有见过有人自己这样做。@ajtatum您能在web中发布其余的代码和当前设置吗?配置由于您似乎正在使用WebForms,这里有一个指向WebForms上的文档的链接授权每个页面都不检查,只检查需要授权的页面(表单身份验证就是这样工作的)。OP的问题是关于表单身份验证和他遇到的问题。这不是关于如何处理身份验证的最佳方法的问题,这将是一个漫长的讨论。我对web配置和身份验证票证进行了更改,但这对开发服务器没有任何帮助。@henry这就是为什么我对您的答案发表评论。@rA而不是回答OP的问题。你的回答会助长错误的做法,因为你似乎要重做一些现成的东西。在我15年的企业asp.net编码生涯中,我从来没有见过有人独自完成这些工作。@A你能在web.config中发布其余的代码和当前的设置吗
var authTicket = new FormsAuthenticationTicket(
    1,
    user.Email,
    DateTime.Now,
    DateTime.Now.AddDays(14),
    true,
    userData,
    FormsAuthentication.FormsCookiePath);
<authentication mode="Forms">
  <forms loginUrl="members/login.aspx" name=".ASPXFORMSAUTH" requireSSL="false" slidingExpiration="true" timeout="120" />
</authentication>
  Dim authCookie As HttpCookie = FormsAuthentication.GetAuthCookie(iMembersID, False)
  Dim ticket As FormsAuthenticationTicket = FormsAuthentication.Decrypt(authCookie.Value)
  Dim newTicket As FormsAuthenticationTicket = New FormsAuthenticationTicket(ticket.Version, ticket.Name, ticket.IssueDate, ticket.Expiration, ticket.IsPersistent, "Member")
  authCookie.Value = FormsAuthentication.Encrypt(newTicket)
  Response.Cookies.Add(authCookie)
    If Request.IsAuthenticated Then
        Dim ident As FormsIdentity = CType(User.Identity, FormsIdentity)
        If ident IsNot Nothing Then

            Dim ticket As FormsAuthenticationTicket = ident.Ticket
            Dim userDataString As String = ticket.UserData

            Select Case ticket.UserData
                Case "Member"
                    m_MemberLoggedIn = ident.Name
                Case Else
                    Response.Redirect("~/members/login/", True)
            End Select


        Else
            Response.Redirect("~/members/login/", True)
        End If