2010-09-16 10 views
5

Tôi đang làm việc trên một dự án Web bằng cách sử dụng Asp.Net MVC, mà tôi sẽ phải triển khai đến một môi trường trang trại.Tạo một trang web ASP.Net MVC có thể mở rộng mà không cần sử dụng Session

Tôi đã đọc rất nhiều bài viết và tôi đang nghĩ đến việc tắt hoàn toàn SessionState, tôi nghĩ điều này sẽ tạo ra một ứng dụng mạnh mẽ hơn và sẽ tiết kiệm cho tôi một vài cơn đau đầu. các phiên xử lý trên một trang trại không phải là tầm thường).

Có một số điều mà tôi vẫn chưa hoàn toàn rõ ràng với cách tiếp cận này, mặc dù chính là quá trình xác thực/ủy quyền. Về cơ bản tôi không chắc chắn về cách (nếu?) Tôi có thể xử lý các phiên người dùng nếu không có SessionState được kích hoạt trên máy chủ. Nếu người dùng đăng nhập vào trang web và sau đó cố gắng truy cập một trang khác, làm cách nào để biết người dùng đã đăng nhập? Tôi biết rằng việc sử dụng cookie không an toàn, tôi nghĩ đến việc kết hợp cookie với ID phiên được lưu trữ trong DB, nhưng tôi cho rằng nếu tôi tắt SessionState, tôi cũng sẽ không có quyền truy cập vào id phiên.

Cách tiếp cận tốt nhất về điều này là gì? Có bất kỳ cuốn sách/bài báo nào bạn có thể chỉ cho tôi để tôi có thể hiểu rõ điều này không?

Cảm ơn rất nhiều sự giúp đỡ của bạn

+3

Sử dụng cookie qua SSL không nhất thiết là không an toàn. Rất nhiều trang web phổ biến hoạt động chính xác theo cách đó – sipwiz

Trả lời

6

Tôi nghĩ rằng sử dụng hình thức xác thực cho điều này này sẽ được quản lý của bạn đăng nhập tên người dùng và bạn cũng có thể thiết lập cho phép thông qua này.

http://msdn.microsoft.com/en-us/library/ff647070.aspx

http://msdn.microsoft.com/en-us/library/xdt4thhy.aspx

http://www.codeproject.com/KB/web-security/formsroleauth.aspx

http://www.beansoftware.com/ASP.NET-Tutorials/Forms-Authentication-Active-Directory.aspx

Các liên kết này ans của mỗi câu hỏi của bạn. Thông qua điều này, bạn có thể quản lý ủy quyền vai trò và phiên

+0

Cảm ơn rất nhiều về tất cả các liên kết này, chúng chắc chắn đã trả lời hầu hết các câu hỏi của tôi về xác thực. – willvv

3

Có thể là nếu có quy trình công việc mà ứng dụng của bạn hỗ trợ mà bạn muốn tồn tại lâu hơn quá trình tái chế ứng dụng (thất bại cụm nút), bạn có thể bỏ qua .

Hãy xem xét ví dụ về thanh toán thương mại điện tử hoặc quy trình nhiều bước tương tự yêu cầu nhiều quản lý nhà nước trước khi hoàn thành. Đề xuất là để thiết kế model của ứng dụng của bạn là một cách mà trong suốt những "bước" này, tiến trình của worklow được duy trì lưu trữ dữ liệu một cách tự nhiên mặc dù mô hình. Đó là, "workfolow" không phải là dạng ngoại lệ đối với mô hình chính của ứng dụng của bạn và được coi như một điều "tạm thời" đòi hỏi một số cơ chế kiên trì như Session aspnet như trái ngược với kho dữ liệu thường xuyên của ứng dụng (cơ sở dữ liệu) .

Ví dụ, thay vì lưu trữ cây đối tượng thanh toán (danh sách các mục, đơn đặt hàng, v.v.) trong phiên, hãy lưu giữ nó vào chính cơ sở dữ liệu. Bằng cách này, không chỉ "hoàn thành một phần thanh toán" tồn tại lỗi nút hoặc tái chế ứng dụng mà còn nếu người dùng đó phải bắn ra một đám cháy khẩn cấp trong nhà bếp hoặc Windows Update của họ bị treo máy tính của họ, họ có thể tiếp tục khi họ đăng nhập tiếp theo . : D Và: bạn tránh tất cả các công cụ quản lý phiên phân phối phức tạp đó. Yuk!

Tôi biết câu trả lời này mở rộng hơn chỉ là điểm xác thực mà câu hỏi thực sự làm nổi bật, nhưng điều này là tốt để biết và chắc chắn là một vấn đề môi trường cụm/trang trại đặt trên các ứng dụng aspnet.

Hanselman trên các ứng dụng MVC clustered: http://www.hanselman.com/blog/LoadBalancingAndASPNET.aspx

+0

Cảm ơn ý kiến ​​của bạn, thực sự ứng dụng của tôi có một vài kịch bản sẽ yêu cầu một phần "quy trình" được lưu trữ, và đây chắc chắn là điều tôi sẽ phải tính đến khi thiết kế này. Tôi chắc chắn ngay bây giờ là cách tốt nhất để đi mà không có trạng thái phiên. Cảm ơn – willvv

2

FormsAuthentication và ASP.NET làm việc lý lịch thành viên mà không cần kích hoạt sessionState - họ chạy trên cookie và tra cứu cơ sở dữ liệu theo mặc định.

Đối với các trường hợp loại giỏ hàng, tôi chỉ xem xét lưu dữ liệu trong cơ sở dữ liệu và gắn thẻ người dùng - nó cho phép mọi người quay lại và lấy xe bị bỏ rơi.

Điều gì có thể và sẽ phá vỡ mà không bật SessionState là TempData của MVC - nó ngăn chặn mọi thứ trong phiên giữa các trang. Nhưng, nếu bạn chỉ tránh sử dụng nó, bạn là vàng.

+0

Tuyệt vời, tôi không chắc chắn về cách xác thực Biểu mẫu hoạt động, giờ đây tôi đã có ý tưởng rõ ràng hơn nhiều. Cảm ơn. – willvv