2012-06-30 32 views
7

Tôi đang cố gắng giúp đỡ một người bạn - họ có một ứng dụng web khá lớn (ASP.NET 4.0, Visual Basic) có một số thư mục con hoạt động như bán phụ các ứng dụng (nhưng chúng chỉ là các thư mục con của ứng dụng chính). Ứng dụng này sẽ được chia thành nhiều ứng dụng web độc lập bởi vì ở dạng hiện tại của nó rất khó để duy trì và phát triển thêm nữa.Chuyển dữ liệu phiên giữa các ứng dụng web ASP.NET

Vấn đề là ứng dụng nguyên khối hiện tại sử dụng một số biến phiên cho những thứ như thông tin người dùng (sau khi đăng nhập, v.v.) Tôi tự hỏi liệu có cách nào dễ dàng chia sẻ thông tin này một cách an toàn giữa các ứng dụng web trong tương lai không rõ ràng sẽ có các phiên độc lập). Trạng thái phiên được lưu trữ trong SQL Server. Người dùng ứng dụng web hiện tại là tất cả người dùng bên ngoài và không phải tất cả người dùng đều có quyền truy cập vào tất cả "các ứng dụng con".

Tôi đang tìm một số lời khuyên về hai điều này:

1. Tôi đã làm một số tìm kiếm và tìm thấy đơn sign-on - điều này dường như giải quyết vấn đề xác thực trên các ứng dụng này nhưng tôi m không quen thuộc với nó và tôi không hiểu làm thế nào thông tin xác thực bị xóa nếu "phiên" hết hạn, vì các ứng dụng web khác nhau sẽ có các phiên khác nhau. Có thể đăng xuất người dùng khỏi tất cả các ứng dụng web sau khi phiên hết hạn trong một trong số đó không?

2. Tôi nghi ngờ (nhưng không chắc chắn) có thể có một số dữ liệu phiên khác ở trên cùng của thông tin xác thực có thể cần được chia sẻ sau khi chia tách. Điều gì sẽ là cách tốt nhất để làm điều này (một lần nữa đáng tin cậy và an toàn)?

Tôi đã tìm thấy this article about passing IDs (đối với các bản ghi cơ sở dữ liệu có thể lưu trữ dữ liệu được chia sẻ) và tự hỏi nó có tốt không.

Tất cả lời khuyên sẽ được đánh giá cao.

PS: Tôi đã tìm thấy một số chủ đề ở đây về SO về điều này nhưng tôi không tin bất kỳ chủ đề nào trả lời các câu hỏi cụ thể này. Các hữu ích nhất mà tôi tìm thấy là một điều này:

Sharing data between ASP.NET applications

+0

Tất cả các ứng dụng đang trên cùng một miền hay khác nhau? – MMK

+1

Tôi nghĩ rằng tất cả chúng sẽ nằm trên cùng một miền. Hiện tại nó chỉ là một ứng dụng duy nhất và tôi tin rằng họ có kế hoạch chia tách trên cùng một miền. – xxbbcc

+0

Tôi cũng đang tìm cách chia sẻ ID phiên giữa ứng dụng trong cùng một miền. –

Trả lời

11

Cuối cùng tôi tìm thấy giải pháp cho vấn đề này và tôi rời khỏi nó ở đây như là tài liệu tham khảo cho người khác:

StateServer sử dụng một dịch vụ cửa sổ (Dịch vụ Nhà nước ASP.NET) mà xử lý các phiên họp trong bộ nhớ. Điều này sử dụng MachineKey, AppDomainAppID cũng như SessionID để nhận dạng duy nhất một ứng dụng.

  • Đặt cùng một MachineKey trong web.config giống nhau cho tất cả các ứng dụng trong trang web.
  • Thêm mã trong Global.asax Init() để đặt AppDomainAppID giống nhau cho tất cả các ứng dụng.
  • Triển khai ISessionIDManager và trả lại ID phiên tùy chỉnh để được sử dụng lại trong các ứng dụng con.

Các liên kết sau cung cấp thông tin để thực hiện thực tế tôi đã làm:

+0

Xin chào, giải pháp này có hoạt động khi tôi có một trang web ASP.NET 4.5 và trang web ASP.NET 5/MVC 6 khác không? Tôi rất cần id phiên tương tự cho trang web mới mà tôi đang thêm. Điều này sẽ giúp tôi truy vấn rất nhiều chi tiết có sẵn trong cơ sở dữ liệu. –

+0

@Wayofhope Tôi không biết câu trả lời (Tôi đã không sử dụng MVC 5/6) nhưng tôi tưởng tượng điều này sẽ làm việc (mặc dù tôi có thể sai). Tôi đề nghị bạn thử. Nếu nó làm việc, tôi sẽ đánh giá cao nếu bạn để lại một bình luận ở đây cho độc giả trong tương lai. – xxbbcc

2

Có thể chia sẻ ASP.NET phiên giữa các ứng dụng khác nhau. Rõ ràng tất cả các ứng dụng chia sẻ cùng một cơ sở dữ liệu trạng thái phiên sẽ cần phải trên cùng một phiên bản của ASP.NET (trên một phiên bản mà các cơ sở dữ liệu trạng thái phiên tương thích). Ngoài ra, tất cả các ứng dụng chia sẻ sẽ cần phải duy trì sự phối hợp về cách thông tin trong trạng thái phiên được duy trì. Ví dụ một biến phiên sẽ cần duy trì thông tin và ý nghĩa tương thích giữa ứng dụng.