2009-02-05 22 views
14

Tôi có một dự án web ASP.NET MVC (RC Refresh) chuẩn, với nhà cung cấp thành viên ASP.NET tiêu chuẩn và bộ điều khiển tài khoản được bao gồm trong mẫu dự án ."Ghi nhớ tôi" với ASP.NET MVC Authentication không hoạt động

Khi tôi chọn "Nhớ thông tin đăng nhập của tôi" trong biểu mẫu Đăng nhập, tôi vẫn không bị trang web nhớ đến. (Firefox nhớ tên người dùng và mật khẩu của tôi, nhưng những gì tôi dự kiến ​​sẽ xảy ra là tự động đăng nhập).

Tôi có phải đặt và kiểm tra cookie theo cách thủ công không? Nếu vậy, tốt nhất nên làm như thế nào?

Trả lời

17

Bạn cần chuyển đúng/sai cho phương thức SetAuthCookie.

public ActionResult Login (string email, string password, bool rememberMe, string returnUrl) 
{ 

    // snip 

    FormsAuth.SetAuthCookie(username, rememberMe); // <- true/false 

    // snip 
} 

và đảm bảo rằng bool rememberMe phản ánh trạng thái của hộp kiểm trên trang đăng nhập của bạn.

+1

Tôi đã làm điều này, với hiệu ứng ngay lập tức khi tôi đăng nhập, đóng trình duyệt, mở lại và duyệt đến trang web, tôi đã đăng nhập lại ngay lập tức - ngay cả khi tôi không cố xem các trang yêu cầu tôi được. Đây có phải là cách nó được cho là, hoặc tôi làm cho nó quá dễ dàng cho tôi? –

+1

createPersistentCookie của SetAuthCookie đang khiến cookie được lưu trên hệ thống của người dùng để giữ cho chúng được đăng nhập. Vì vậy, vâng, đây là thông số mà thông số đó thực hiện. Có hai mục khác kiểm soát thông tin đăng nhập là "Thời gian chờ của phiên" và "Thời gian chờ ủy quyền". –

+0

Nếu thời gian chờ của phiên xảy ra nhưng thời gian chờ của ủy quyền thì không, khi người dùng truy cập trang web, họ có cần phải đăng nhập lại sau khi đăng nhập lần đầu bằng ghi nhớ tôi đã kiểm tra không? – ajbeaven

3

Bạn cần tạo cookie cố định trong phương pháp điều khiển xử lý đăng nhập khi hộp Nhớ Nhớ được chọn. Nếu bạn đang sử dụng RedirectFromLoginPage, hãy đặt đối số createPersistentCookie thành true.

+0

Bây giờ tôi tạo cookie bằng mã sau. nếu (nhớMe) { HttpCookie cookie = FormsAuthentication.GetAuthCookie (userName, true); cookie.Expires = DateTime.Now.Add (TimeSpan mới (30, 0, 0, 0)); Response.Cookies.Add (cookie); } làm cách nào để kiểm tra xem có cookie hợp lệ với yêu cầu không? –

+0

Tôi nghĩ nếu bạn nhận được cookie phiên hợp lệ, người dùng sẽ được đặt trong HttpContext và họ sẽ không được chuyển hướng đến trang đăng nhập của bạn bằng AuthorizationAttribute. – tvanfosson

2

3 phương pháp này đã giúp tôi duy trì một cookie.

Lưu ý, nếu người dùng bỏ chọn "Ghi nhớ tôi", bạn sẽ muốn xóa cookie.

private const string RememberMeCookieName = "MyCookieName"; 



     private string CheckForCookieUserName() 
     { 
      string returnValue = string.Empty; 
      HttpCookie rememberMeUserNameCookie = Request.Cookies.Get(RememberMeCookieName); 
      if (null != rememberMeUserNameCookie) 
      { 
       /* Note, the browser only sends the name/value to the webserver, and not the expiration date */ 
       returnValue = rememberMeUserNameCookie.Value; 
      } 

      return returnValue; 
     } 

     private void CreateRememberMeCookie(string userName) 
     { 
      HttpCookie rememberMeCookie = new HttpCookie(RememberMeCookieName, userName); 
      rememberMeCookie.Expires = DateTime.MaxValue; 
      Response.SetCookie(rememberMeCookie); 
     } 

     private void RemoveRememberMeCookie() 
     { 
      /* k1ll the cookie ! */ 
      HttpCookie rememberMeUserNameCookie = Request.Cookies[RememberMeCookieName]; 
      if (null != rememberMeUserNameCookie) 
      { 
       Response.Cookies.Remove(RememberMeCookieName); 
       rememberMeUserNameCookie.Expires = DateTime.Now.AddYears(-1); 
       rememberMeUserNameCookie.Value = null; 
       Response.SetCookie(rememberMeUserNameCookie); 
      } 
     } 
Các vấn đề liên quan