2010-07-28 35 views
6

Tôi đang làm việc với ứng dụng asp.net lưu trữ hầu hết dữ liệu trong cơ sở dữ liệu chứ không phải phiên. Tôi đang tự hỏi về những ưu và khuyết điểm của mỗi và đó là cách tốt hơn để đi. Ví dụ, bạn có một trang web khá bận và thay vì lưu trữ các biến cụ thể của người dùng trong phiên, có một bảng DB được gọi là dữ liệu người dùng và nó có thể lưu trữ tất cả dữ liệu người dùng cụ thể có thể truy cập từ bất kỳ trang nào bằng cách truy vấn cơ sở dữ liệu. Đó là cách tốt hơn để đi, phiên hoặc cơ sở dữ liệu?Lưu trữ biến người dùng trong cơ sở dữ liệu so với phiên trong asp.net

Trả lời

2

Câu hỏi thú vị. Nếu đó là dữ liệu không quan trọng trong các phiên (nói, xem trang cuối) -> phiên. Nếu đó là dữ liệu nên liên tục (nói, mật khẩu) -> cơ sở dữ liệu. Các trường hợp thú vị và một trong những bạn có thể đề cập đến: Dữ liệu đó nên được liên tục nhưng cũng được sử dụng thường xuyên (nói, tên người dùng). Từ đó, tôi có xu hướng sao chép các giá trị đó từ DB vào phiên cho phép tôi làm việc mà không cần truy cập cơ sở dữ liệu trong các trang có nhiệm vụ tầm thường.

3

Mọi thứ được lưu trữ trong trạng thái phiên sẽ biến mất khi AppDomain được đặt lại.

Bạn có thể tránh điều đó bằng cách sử dụng trình xử lý trạng thái ngoài phiên proc, nhưng không tốt hơn cơ sở dữ liệu.

3

Session (nhưng nó phụ thuộc rất nhiều cấu hình phiên):

  • Không truy cập cơ sở dữ liệu, hoặc ít hơn.
  • Bộ nhớ tạm thời: bạn có thể mất thông tin, ít nhất là khi phiên kết thúc.
  • Có thể một số vấn đề bảo mật, tùy thuộc vào nơi bạn lưu trữ thông tin phiên
  • Không chia sẻ: bạn có thể gặp sự cố nếu bạn đang sử dụng máy chủ, một máy chủ có thể không có quyền truy cập vào phiên máy chủ khác.
  • Có thể không hoạt động nếu khách hàng vô hiệu hóa cookie.

Cơ sở dữ liệu:

  • Cơ sở dữ liệu giao thông cho mỗi postback nếu bạn cần những thông tin trên mỗi trang.
  • Bộ nhớ vĩnh viễn.
  • Không có thông tin nào được lưu trữ với khách hàng (cookie ...).
  • Được chia sẻ: dữ liệu có thể truy cập từ bất kỳ máy chủ nào trên trang trại.

Xin lưu ý rằng bạn có thể lưu trữ thông tin Phiên trong cơ sở dữ liệu. Đó là lý do tại sao tôi sử dụng từ "may" trong phần Phiên. Xem here some session configuration and possibilities

2

Trong nhiều trường hợp, tôi sử dụng Session để lưu trữ dữ liệu tạm thời về ... cũng ... "phiên". Trong ASP.NET, phiên là cấu hình. Bạn có thể sử dụng in-proc (mặc định) sử dụng bộ nhớ của máy chủ. Bạn cũng có thể cấu hình phiên để sử dụng cơ sở dữ liệu hoặc công cụ quản lý phiên (trong trường hợp bộ nhớ máy chủ là một vấn đề hoặc bạn chuyển sang môi trường cụm/trang trại).

Phiên có nghĩa là tạm thời. Điều này thật tuyệt vời khi bạn thực sự lưu trữ dữ liệu về người dùng đang sử dụng ứng dụng của bạn tại thời điểm đó. Khi người dùng rời khỏi ứng dụng và phiên của anh ta/cô ấy hết hạn, bộ nhớ sẽ được giải phóng. Bạn không phải tự xóa mọi thứ.

Phiên sử dụng bộ nhớ của máy chủ. Miễn là bạn có đủ bộ nhớ và bạn không ở trên một cụm máy chủ, điều này hoạt động tuyệt vời.Bộ nhớ rất nhanh, do đó việc nhận và thiết lập dữ liệu trong phiên rất nhanh và sử dụng băng thông mạng bằng 0.

Đã nói tất cả điều đó, trong một vài ứng dụng của tôi, tôi đã định cấu hình phiên sử dụng SQL. Về cơ bản nó giống như việc sử dụng cơ sở dữ liệu trực tiếp, nhưng tôi không phải đối phó với DAL ... chỉ để cho khung làm việc cho bạn.

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