2012-06-30 13 views
7

Próbuję pomóc znajomemu - mają dość dużą aplikację internetową (ASP.NET 4.0, Visual Basic), która ma wiele podfolderów, które działają jak quasi podrzędne aplikacje (ale to tylko podfoldery głównej aplikacji). Ta aplikacja zostanie podzielona na wiele niezależnych aplikacji internetowych, ponieważ w obecnej formie trudno ją utrzymać i dalej rozwijać.Przekazywanie danych sesji między aplikacjami sieci Web ASP.NET

Problem polega na tym, że obecna monolityczna aplikacja używa wielu zmiennych sesji dla rzeczy takich jak informacje o użytkowniku (po zalogowaniu itp.) Zastanawiam się, czy istnieje łatwy sposób na bezpieczne udostępnianie tych informacji w przyszłości wielu aplikacjom internetowym (które będą oczywiście miały niezależne sesje). Stan sesji jest przechowywany w SQL Server. Użytkownicy bieżącej aplikacji internetowej to wszyscy użytkownicy zewnętrzni, a nie wszyscy użytkownicy mają dostęp do wszystkich "pod-aplikacji".

szukam jakiejś porady na temat tych dwóch rzeczy:

1. Już to zrobiłem kilka wyszukiwania i znajdując single-sign-on - to wydaje się rozwiązać problem z uwierzytelnianiem w poprzek tych aplikacji, ale I” Nie znam go i nie rozumiem, w jaki sposób dane uwierzytelniające są usuwane, gdy wygasa "sesja", ponieważ różne aplikacje internetowe będą miały różne sesje. Czy możliwe jest wylogowanie użytkownika ze wszystkich aplikacji internetowych po wygaśnięciu sesji w jednym z nich?

2. Podejrzewam (ale nie jestem pewien), że mogą istnieć inne dane sesji oprócz informacji uwierzytelniających, które mogą wymagać wymiany po podziale. Jaki byłby najlepszy sposób na to (ponownie niezawodnie i bezpiecznie)?

Znalazłem this article about passing IDs (do rekordów bazy danych, które przechowują udostępnione dane) i zastanawiam się, czy to dobrze.

Wszystkie porady będą mile widziane.

PS: Znalazłem wiele wątków na SO na ten temat, ale nie sądzę, aby którykolwiek z nich odpowiedzieć na te konkretne pytania. Najbardziej pomocne znalazłem ten:

Sharing data between ASP.NET applications

+0

wszystkie aplikacje są na tej samej domeny lub inaczej? – MMK

+1

Myślę, że wszyscy będą w tej samej domenie. Obecnie jest to tylko jedna aplikacja i myślę, że planują podział na tę samą domenę. – xxbbcc

+0

Zbyt zamierzam udostępnić identyfikator sesji między aplikacją w tej samej domenie. –

Odpowiedz

11

końcu znalazłem rozwiązanie tego problemu, a ja odchodzę go tutaj jako odniesienie do innych:

StateServer korzysta z usługi Windows (ASP.NET State życzenie), który obsługuje sesje w pamięci. Wykorzystuje to MachineKey, AppDomainAppID oraz SessionID do jednoznacznej identyfikacji aplikacji.

  • Ustaw tę samą maszynę MachineKey w pliku web.config, aby była taka sama dla wszystkich aplikacji w witrynie.
  • Dodaj kod w Global.asax Init(), aby ustawić AppDomainAppID tak, aby była taka sama dla wszystkich aplikacji.
  • Wprowadź identyfikator ISessionIDManager i zwróć niestandardowy identyfikator sesji, który ma być ponownie użyty w podaplikacjach.

Poniższe linki dostarczyła dane do rzeczywistego wdrożenia robiłam:

+0

Witam, czy to rozwiązanie działa, gdy mam jedną witrynę ASP.NET 4.5 i inną witrynę ASP.NET 5/MVC 6? Rozpaczliwie potrzebuję tego samego identyfikatora sesji do nowej strony internetowej, którą dodaję. Pomoże mi to sprawdzić wiele szczegółów dostępnych w bazie danych. –

+0

@Wayofhope Nie znam odpowiedzi (nie korzystałem z MVC 5/6), ale wyobrażam sobie, że to zadziała (chociaż mogę się mylić). Proponuję spróbować. Jeśli to zadziała, byłbym wdzięczny za pozostawienie komentarza tutaj dla przyszłych czytelników. – xxbbcc

2

Możliwe jest dzielić sesji ASP.NET między różnymi aplikacjami. Oczywiście wszystkie aplikacje współużytkujące tę samą bazę danych stanu sesji będą musiały być na tej samej wersji ASP.NET (na wersji, w której bazy danych stanu sesji są kompatybilne). Ponadto wszystkie aplikacje do współużytkowania będą musiały być skoordynowane w zakresie utrzymania informacji w stanie sesji. Na przykład zmienna sesji musiałaby utrzymywać kompatybilne informacje i znaczenie między aplikacjami.

Powiązane problemy