我正在使用Asp.Net和MVC 4来构建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,因此这些请求未经过身份验证。
对此行为有何看法? ,我错过了什么吗?
答案 0 :(得分:0)
尝试使用以下方式明确设置Cookie的到期时间:
Cookie.Expires(DateTime.Now.AddMinutes(30));