2009-07-01 11 views
24

Tôi muốn lưu trữ một số dữ liệu như biệt hiệu người dùng và ID người dùng (khóa chính của bảng) trong phần dữ liệu người dùng của cookie xác thực. Lý do tôi làm điều này là giữ lại dữ liệu này khi trình duyệt bị đóng, mà không có người dùng relogin.Dữ liệu người dùng ASP.Net Store trong Auth Cookie

Chỉnh sửa: Rất tiếc! Nhận ra tôi đã không giải thích rõ về bản thân mình. Tôi không cố gắng xác thực lại người dùng dựa trên cookie của họ. Người dùng là đã được xác thực bởi hệ thống thành viên ASP.Net - phần này là tốt. Vấn đề của tôi là nếu tôi muốn hiển thị biệt hiệu của người dùng, ví dụ, tôi phải kích hoạt một truy vấn SQL khác, sau đó lưu trữ nó trong phiên. Tôi thấy nó sẽ có ý nghĩa để lưu trữ thông tin này trong cookie auth (một lần nữa, một trong những đã được tạo ra bởi ASP.Net) trong phần UserData, mà dường như đã được tạo ra cho mục đích này.

Tôi không muốn sử dụng hồ sơ vì tôi có bảng người dùng của riêng mình với dữ liệu tiểu sử và tôi cần một giải pháp gọn nhẹ.

Cách tốt để mã hóa dữ liệu này trong phần dữ liệu người dùng của cookie xác thực là gì? Tôi đã nghĩ về việc tuần tự hóa, nhưng đó có thể là quá mức cần thiết. Tôi đang đi về điều này một cách sai lầm?

Trả lời

34

tôi đã viết một chiều sâu hướng dẫn về làm thế nào để làm điều này ở đây:

http://www.danharman.net/2011/07/07/storing-custom-data-in-forms-authentication-tickets/

này duy trì sự mã hóa và xác thực, và u ses json để tuần tự hóa một lớp vào trường UserData.

+0

Công việc tuyệt vời, nên có nhiều phiếu bầu hơn! – flq

+0

Giải pháp tuyệt vời. Ngay cả khi không có phần tuần tự hóa json, đây là một cách tuyệt vời để thiết lập chuỗi UserData và duy trì các giá trị mặc định/cấu hình khác mặc dù API của biểu mẫu khủng khiếp của auth. –

+0

Câu trả lời của bạn dường như làm chính xác những gì tôi đã dự định vào thời điểm đó! Cảm ơn! –

2

Có thể bạn chỉ cần tạo một cookie khác ... Cá nhân tôi sẽ không gây rối với cookie xác thực.

+0

Thật sự tôi đang tạo ra một cookie auth mới. Tôi có thể tiếp tục và lưu trữ một chuỗi văn bản đơn giản trong phần UserData của cookie mới. Câu hỏi của tôi là sắp xếp các đối tượng phức tạp hơn. –

+0

Tôi có nghĩa là một cookie ngoài cookie auth. Chỉ để lại cookie xác thực và tạo một cookie chưa được mã hóa mới cho dữ liệu người dùng tạm thời. –

+4

Không, tôi sẽ lưu trữ ID người dùng và Biệt hiệu - sẽ không muốn lưu trữ dữ liệu nhạy cảm như vậy mà không cần mã hóa –

3

Có. Nếu bạn đang lưu trữ ID người dùng và Đăng nhập trong cookie, điều gì ngăn người khác thay đổi cookie của họ thành ID người dùng và Đăng nhập của bất kỳ ai?

Bạn cần thiết lập hệ thống vé xác thực. Về cơ bản đó là một giá trị cookie được kiểm tra khi không có phiên nào tồn tại. Nếu một giá trị có mặt, bạn chạy nó đối với một bảng vé phải chứa ID người dùng của họ. Nếu bạn tìm thấy vé, hãy cho họ một phiên và một vé mới.

+1

Hmm ... Tôi chắc chắn ASP.Net đã có lại một vé mới khi người dùng xác nhận lại trình duyệt dựa trên cookie xác thực của họ. Tuy nhiên, tôi tin rằng bạn cũng cho rằng ngay cả ID người dùng được mã hóa được lưu trữ trong dữ liệu người dùng có thể được thay thế bằng dữ liệu được mã hóa của người dùng độc hại được lưu trữ trong cookie auth của mình? Nhưng sau đó tôi không chắc chắn tôi làm theo các điểm của phần userdata trong cookie auth ở tất cả! –

3

Nếu bạn đã có một bảng người dùng có thông tin hồ sơ trong đó, tại sao bạn không móc nối nó với một số custom profile provider.

Nếu bạn muốn một ví dụ về làm thế nào để thực hiện một cái gì đó như thế này, bạn có thể có một cái nhìn tại SQL Table Profile Provider

0

Lưu trữ dữ liệu người dùng bổ sung trong cookie có nghĩa là cookie lớn hơn được gửi qua lại từ máy khách với mọi yêu cầu.

Một cách tiếp cận tốt hơn để tránh các cơ sở dữ liệu thêm lượt truy cập bạn đang lo lắng về là bộ nhớ cache dữ liệu đó trong bộ nhớ sau khi người dùng đăng nhập.

ASP.NET có một bộ nhớ cache theo yêu cầu HttpContext.Current.Items và ứng dụng domain cache HttpContext.Current.Cache, tôi nghĩ bạn đang tìm kiếm HttpContext.Current.Cache trong trường hợp này.

Hoặc nếu bạn cần bộ nhớ đệm trên máy chủ web (cân bằng tải các máy chủ web), bạn có thể nhìn vào các cửa hàng giá trị chủ chốt bên thứ 3 như như memcached, redis, vận tốc, ncache, vv

+0

như thế nào là khác nhau từ phiên –