2012-06-30 3 views
7

J'essaie d'aider un ami: il possède une application Web assez volumineuse (ASP.NET 4.0, Visual Basic) qui comporte un certain nombre de sous-dossiers qui agissent tous comme des sous- applications (mais ce ne sont que des sous-dossiers de l'application principale). Cette application sera divisée en plusieurs applications web indépendantes car dans sa forme actuelle, il est difficile de maintenir et de développer davantage. Le problème est que l'application monolithique actuelle utilise un certain nombre de variables de session pour des choses comme les informations utilisateur (après la connexion, etc.) Je me demande s'il existe un moyen facile de partager ces informations en toute sécurité parmi les futures applications Web multiples. aura évidemment des sessions indépendantes). L'état de la session est stocké dans SQL Server. Les utilisateurs de l'application Web actuelle sont tous des utilisateurs externes et tous les utilisateurs n'ont pas accès à toutes les «sous-applications».Transmission de données de session entre applications Web ASP.NET

Je cherche quelques conseils au sujet de ces deux choses:

1. je l'ai déjà fait quelques recherches et trouvé une seule ouverture de session - cela semble résoudre le problème de l'authentification à travers ces applications mais je Je ne le connais pas et je ne comprends pas comment les informations d'authentification sont effacées si la "session" expire, puisque les différentes applications web auront des sessions différentes. Est-il possible de déconnecter un utilisateur de toutes les applications Web une fois la session expirée dans l'un d'eux?

2. Je soupçonne (mais je ne suis pas certain) qu'il peut y avoir d'autres données de session sur les informations d'authentification qui pourraient devoir être partagées après le fractionnement. Quel serait le meilleur moyen de le faire (encore une fois de manière fiable et sécurisée)?

J'ai trouvé this article about passing IDs (aux enregistrements de base de données qui contiendraient les données partagées) et je me demande si c'est bon.

Tous les conseils seraient appréciés. PS: J'ai trouvé un certain nombre de discussions ici sur SO à ce sujet, mais je ne crois pas qu'aucun d'entre eux répondent à ces questions spécifiques. Le j'ai trouvé plus utile est celui-ci:

Sharing data between ASP.NET applications

+0

Toutes les applications sont sur un même domaine ou différents? – MMK

+1

Je pense qu'ils seront tous sur le même domaine. Actuellement, il n'y a qu'une seule application et je crois qu'ils prévoient la division sur le même domaine. – xxbbcc

+0

Je cherche aussi à partager l'ID de session entre l'application sous le même domaine. –

Répondre

11

Finalement, j'ai trouvé la solution à ce problème et je le laisse ici comme référence aux autres:

StateServer utilise un service Windows (Service d'état ASP.NET) qui gère les sessions en mémoire. Cela utilise MachineKey, AppDomainAppID ainsi que le SessionID pour identifier de manière unique une application.

  • Définissez la même MachineKey dans web.config pour qu'elle soit la même pour toutes les applications du site.
  • Ajoutez du code dans Global.asax Init() pour que AppDomainAppID soit identique pour toutes les applications.
  • Implémentez ISessionIDManager et renvoyez l'ID de session personnalisé à réutiliser dans les sous-applications.

Les liens suivants ont fourni les informations à la mise en œuvre réelle, je l'ai fait:

+0

Salut, cette solution fonctionnera-t-elle quand j'ai un site Web d'ASP.NET 4.5 et un autre site Web d'ASP.NET 5/MVC 6? J'ai désespérément besoin de la même identification de session au nouveau site Web que j'ajoute. Cela m'aidera à interroger beaucoup de détails disponibles dans la base de données. –

+0

@Wayofhope Je ne connais pas la réponse (je n'ai pas utilisé MVC 5/6) mais j'imagine que cela fonctionnerait (même si je peux me tromper). Je vous suggère de l'essayer. Si cela fonctionne, j'apprécierais que vous laissiez un commentaire ici pour les futurs lecteurs. – xxbbcc

2

Il est possible de partager la session ASP.NET entre les différentes applications. Évidemment, toutes les applications partageant la même base de données d'état de session devraient être sur la même version d'ASP.NET (sur une version où les bases de données d'état de session sont compatibles). En outre, toutes les applications de partage doivent rester coordonnées sur la façon dont les informations dans l'état de session sont conservées. Par exemple, une variable de session doit conserver des informations et une signification compatibles entre l'application.

Questions connexes