2012-01-13 34 views
15

Tôi đang sử dụng ASP.NET MVC 3, với xác thực biểu mẫu (dựa trên mã tài khoản vanilla đã sửa đổi bạn nhận được với tệp-> mới).Tại sao cookie xác thực liên tục ASP.NET MVC của tôi không hoạt động?

Khi bạn đăng nhập, tôi đang thiết lập một cookie auth với

FormsAuthentication.SetAuthCookie(userName, true); 

Vì vậy, điều này sẽ thiết lập một cookie. Nhưng nếu tôi đóng trình duyệt và mở lại, khi tôi duyệt đến trang web, tôi buộc phải đăng nhập lại! Tôi có thể thấy bằng cách sử dụng các công cụ chrome dev mà cookie (.ASPXAUTH) đang được tạo và không bị xóa khi tôi đóng trình duyệt, vậy điều gì đang xảy ra?

web.config của tôi:

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/LogIn" timeout="10000"/> 
</authentication> 

Tôi đang thử nghiệm này tại địa phương, dưới IIS nếu mà làm cho bất kỳ sự khác biệt.

+1

bạn có thể kiểm tra câu trả lời này: http://stackoverflow.com/questions/682788/making-user-login-persistant-with-asp-net-membership – alexl

+2

Ok, liên kết này dường như sắp xếp nó cho tôi - gắn bó với SetAuthCookie và tinh chỉnh cấu hình của tôi để đặt rõ ràng tên cookie (trong web.confg) và tất cả hiện đang hoạt động. Kỳ dị! –

+0

@Matt Roberts - Tôi không biết tại sao nhưng thiết lập tên cookie cũng đã sửa nó cho tôi. Bạn sẽ nghĩ rằng nó sẽ chỉ làm việc với các cookie được tên miền cụ thể vv Đây có phải là một lỗi trong MVC hoặc .NET có thể? – Greg

Trả lời

3

Giải Quyết từ bình luận từ @alexl:

bạn có thể kiểm tra câu trả lời này: Making user login persistant with ASP .Net Membership

Ok, liên kết này dường như để sắp xếp nó cho tôi - gắn bó với SetAuthCookie và tinh chỉnh cấu hình của tôi để thiết lập một cách rõ ràng tên cookie (trong web.confg), và tất cả hiện đang hoạt động. Kỳ dị! -

8

Tôi nên tự tạo cho mình một cookie bằng cách sử dụng vé xác thực. SetAuthCookie tạo một vé auth dưới mui xe. Bạn đã thử làm cho vé auth của riêng bạn? Nó sẽ cho phép bạn lưu trữ thêm dữ liệu trên đó.

Dưới đây là một ví dụ:

// create encryption cookie   
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1, 
     userName, 
     DateTime.Now, 
     DateTime.Now.AddDays(90), 
     createPersistentCookie, 
     string.Empty); 

// add cookie to response stream   
string encryptedTicket = FormsAuthentication.Encrypt(authTicket);  
System.Web.HttpCookie authCookie = new System.Web.HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); 
if (authTicket.IsPersistent) 
{  
     authCookie.Expires = authTicket.Expiration; 
} 
System.Web.HttpContext.Current.Response.Cookies.Add(authCookie); 

Hope this helps.

+0

Cảm ơn. Vì vậy, tôi không nên sử dụng SetAuthCookie ở tất cả? Các tài liệu MSDN nói với tôi để sử dụng để tạo ra một cookie auth có thể được liên tục. Ngoài ra, mã vani cho một ứng dụng MVC mới sử dụng SetAuthCookie - có phải là sai? –

+0

SetAuthCookie() đang hoạt động trên toàn cầu giống nhau. Nó chỉ là lạ vì có vẻ như nó không hoạt động mọi lúc. Tôi thích tạo myslef một vé xác thực và thêm nó vào luồng phản hồi. –

+0

cũng kiểm tra liên kết @alexl được đăng dưới dạng nhận xét cho câu hỏi của bạn. –

Các vấn đề liên quan