MVC 4表单身份验证奇怪的行为

时间:2013-08-22 05:48:40

标签: asp.net-mvc jquery forms-authentication

我正在使用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,因此这些请求未经过身份验证。

对此行为有何看法? ,我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

尝试使用以下方式明确设置Cookie的到期时间:

Cookie.Expires(DateTime.Now.AddMinutes(30));