我知道Forms身份验证很旧,但是当我使用IIS Express在本地运行Web应用程序时,一切都运行良好。但是当我将它发布到我们的开发/测试服务器时,它只是重新加载页面。开发服务器正在运行IIS 6.
还有一点需要注意,本地它以localhost运行:50264 / Login。在开发服务器上,网址更像http://dev1.server.com/op/webapp/Account/Login。
我注意到两个cookie都有路径" /"。我确实尝试通过在我的本地web.config中设置更改:
<add key="CookiePath" value="/" />
然后当我发布到我们的开发服务器时,它改为:
<add key="CookiePath" value="http://dev1.server.com/op/webapp/" xdt:Transform="Replace" xdt:Locator="Match(key)" />
这似乎不起作用。
在Stack Overflow中找到的另一个帖子中,有人建议将其添加到:
<system.webServer>
<modules>
<add name="FormsAuthenticationModule" type="System.Web.Security.FormsAuthenticationModule" />
</modules>
</system.webServer>
那也没有用。任何帮助将不胜感激!
更新时间:2016年9月29日
我删除了CookiePath应用设置,而是对身份验证节点进行了调整。在我的Web.config中,我现在有:
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" requireSSL="false" slidingExpiration="true" path="/" />
</authentication>
在我的Web.Debug.config中,我有:
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" requireSSL="false" slidingExpiration="true" path="/op" xdt:Transform="Replace" />
</authentication>
最后,当我创建cookie时:
var authTicket = new FormsAuthenticationTicket(
1,
user.Email,
DateTime.Now,
DateTime.Now.AddDays(14),
true,
userData,
FormsAuthentication.FormsCookiePath);
当我部署到开发服务器时,我检查了web.config,它确实正确地转换了表单节点。
当我登录时,我输入了我的凭据,它仍然刷新了登录页面。使用Chrome扩展程序&#34; EditThisCookie&#34;我仍然看到cookie的路径是&#34; /&#34;。它并没有认识到所有的变化。即使我手动将authTicket路径设置为&#34; / op&#34; Cookie STILL的路径为&#34; /&#34;。我不知道发生了什么。啊...
答案 0 :(得分:1)
我也使用表单身份验证,这是我的设置。您没有显示所有表单身份验证代码,但希望这会指出您正确的方向。
的Web.Config
<authentication mode="Forms">
<forms loginUrl="members/login.aspx" name=".ASPXFORMSAUTH" requireSSL="false" slidingExpiration="true" timeout="120" />
</authentication>
然后我在用户登录时在代码中设置cookie。
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
更新9月29日:
检查以确保IIS身份验证模式设置为匿名
答案 1 :(得分:1)
我轻松地走了出去,并要求我们的IT部门创建一个子域,因此cookie的路径始终是&#34; /&#34;。不是答案,而是我所做的。