我已经将解决方案从vs2013移植到了2015年。我的表单身份验证不再有效。
在第一个请求中,我让用户登录并创建cookie。如果我刷新页面或单击任何地方,我的ASPXAUTH cookie就不再存在了。
在chrome中,我可以看到我的响应cookie具有相同的名称。不知道为什么。
请求Cookies 613 C83F564B3B0C929EA69218DC83C651DB2376C2541E9F83C4CD6FCB6B76570B68DD0DF1BB184531ACDABAA2F565C274D59B9958D372C4B927E2D34CD6D1337E26D82D346729DB2B60B263D51FF6BC1E5B464FDF5B32E003F9C963A7A5815D415C113C7A038D46FFD1441FE1F97F604CD1595BF4A430071BB4C47C8E18C4730E18BC827388 N/A 274 ASP.NET_SessionId 2 pyvx1ia0rsfymsmommbbcgN/A 44 响应协同18 .ASPXAUTH /会话18
我用来创建auth cookie的代码是:
Dim ticket As FormsAuthenticationTicket = New FormsAuthenticationTicket(1, userName, Date.Now, Date.Now.AddMinutes(timeout), True, String.Empty)
Dim encTicket As String = FormsAuthentication.Encrypt(ticket)
Dim loginCookie As HttpCookie = New HttpCookie(FormsAuthentication.FormsCookieName)
loginCookie.Value = encTicket
Response.Cookies.Add(loginCookie)对这种行为有什么解释吗?谢谢
发布于 2016-10-18 15:16:30
在代码中,手动创建FormsAuthenticationTicket。
除了上面的代码外,您还需要在每次请求时从cookie中检索用户名,并将其保存在IPrincipal对象中,以便您可以访问IPrincipal
Global.asax.cs
public class Global : HttpApplication
{
private void Application_AuthenticateRequest(object sender, EventArgs e)
{
HttpCookie decryptedCookie =
Context.Request.Cookies[FormsAuthentication.FormsCookieName];
FormsAuthenticationTicket ticket =
FormsAuthentication.Decrypt(decryptedCookie.Value);
var identity = new GenericIdentity(ticket.Name);
var principal = new GenericPrincipal(identity, null);
HttpContext.Current.User = principal;
Thread.CurrentPrincipal = HttpContext.Current.User;
}
}https://stackoverflow.com/questions/40111816
复制相似问题