我正在使用带有 MVC 4 的 Asp.Net 来构建 Web 应用程序。对于身份验证,我使用的是表单身份验证。登录页面设置正确,登录行为正常。但是,我没有使用默认的部分登录视图,而是使用我自己的并使用 AJAX 登录。
登录控制器工作正常,这里是登录代码。
这是我在登录操作中的代码。这里 resp 是我的自定义响应对象
resp.Status = true;
// sometimes used to persist user roles
string userData = "some user data";
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
1, // ticket version
login.username, // authenticated username
DateTime.Now, // issueDate
DateTime.Now.AddMinutes(30), // expiryDate
false, // true to persist across browser sessions
userData, // can be used to store additional user data
FormsAuthentication.FormsCookiePath); // the path for the cookie
// Encrypt the ticket using the machine key
string encryptedTicket = FormsAuthentication.Encrypt(ticket);
// Add the cookie to the request to save it
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
cookie.HttpOnly = true;
//Response.Cookies.Add(cookie);
Response.SetCookie(cookie);
return Json(resp);
这是处理此脚本响应的cshtml页面的代码
function (respData) {
if (respData.Status) {
window.location.href = "/";
}
if (!respData.Status) {
if (respData.Errors[0].ErrorCode == 1) {
$('#invalid').show();
$('#username').val('');
$('#password').val('');
}
else if (respData.Errors[0].ErrorCode == -1) {
var msg = respData.Errors[0].ErrorDescription;
$('#error_email').text(msg);
}
else {
var msg = respData.Errors[0].ErrorDescription;
$('#error_pwd').text(msg);
}
}
$("#dialog").dialog("close");
},
一切正常,用户成功登录后成功重定向到主页。还会收到有关失败的正确消息。
问题是,当我在此成功重定向后浏览任何其他页面时,后续请求未经过身份验证。
我做了一些研究,发现浏览器没有在后续请求中发送表单身份验证 cookie,因此这些请求没有经过身份验证。
对这种行为有任何想法吗?,我错过了什么吗?