1

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

对这种行为有任何想法吗?,我错过了什么吗?

4

1 回答 1

0

尝试使用以下命令明确设置 cookie 的到期时间:

Cookie.Expires(DateTime.Now.AddMinutes(30));
于 2013-08-22T09:31:28.970 回答