2011-07-06 19 views
21

tôi có mã xác thực:Khi nào HttpContext.User.Identity được đặt?

var authTicket = new FormsAuthenticationTicket(/*blahblah....*/); 
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, 
          FormsAuthentication.Encrypt(authTicket)); 
Response.Cookies.Add(cookie); 
var name = HttpContext.User.Identity.Name; // line 4 

Bằng cách đưa vào báo cáo gỡ lỗi, tôi thấy rằng name trên dòng 4 là sản phẩm nào. Nhưng lần sau khi tôi thực hiện cuộc gọi trên phiên trình duyệt này, HttpContext.User.Identity.Name được đặt chính xác.

Vậy khi nào giá trị này được đặt?

+0

chỉ cần tự hỏi tại sao bạn sẽ tạo cookie theo cách thủ công và thêm nó vào phản hồi thay vì chỉ gọi: FormsAuthentication.SetAuthCookie()? –

+0

Cũng tự hỏi tại sao bạn cần phải lấy tên người dùng từ HttpContext nếu bạn sắp đặt một cookie Auth? Chắc chắn nếu bạn sắp đặt cookie Auth - bạn đang nói rằng bạn muốn đặt người này là "đã đăng nhập" - bạn có thể làm điều đó như thế nào nếu bạn chưa biết tên người dùng của họ? –

+1

@Nick - lý do là bởi vì đây là mới nhất trong một loạt các phát triển, bạn có thể theo dõi lại từ đây: http://stackoverflow.com/q/6586156/7850 –

Trả lời

18

Các HttpContext.User.Identity.Name sẽ được thiết lập nếu Yêu cầu đã cho chứa cookie xác thực. Trong trường hợp của bạn, cookie vừa được thêm vào Phản hồi cho Trình duyệt để chọn. Trình duyệt sẽ thêm cookie vào các yêu cầu sau nếu nó tồn tại.

+0

Bây giờ đó là những gì tôi đã nghĩ. Ngoại trừ việc tôi đang trải nghiệm hành vi không phù hợp với những gì bạn mô tả. Xem tại đây: http://stackoverflow.com/q/6586156/7850 –

+0

Ồ, người đàn ông. Điều đó có vẻ là một vấn đề thực sự khó hiểu mà bạn có ở đó, nhưng như tôi đã thu thập từ cuộc trò chuyện, cookie được gửi đi với câu trả lời sau khi đăng nhập, cũng trong máy khách. Tôi sẽ cố gắng để xem tôi có thể giúp đỡ với vấn đề ban đầu của bạn. – tehshin

+0

là tập hợp cookie xác thực trong cả xác thực biểu mẫu và xác thực Windows hoặc chỉ xác thực biểu mẫu? – MacGyver

2

Từ mã của bạn có vẻ như bạn hoặc sẽ phải gọi:

FormsAuthentication.Authenticate(name, password) 

hoặc nếu sử dụng thành viên như sau:

Membership.ValidateUser(name, password) 
+0

Cảm ơn, nhưng đó không phải là những gì tôi yêu cầu. .. –

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