Partage de sessions entre applications à l’aide du service d’état de session ASP.NET

J’essaie de partager des sessions entre deux applications Web, toutes deux hébergées sur le même serveur. L’une est une application de formulaires Web .net 2.0, l’autre est une application .net 3.5 MVC2.

Les deux applications ont leur session configurée comme ceci:

 

Dans l’application de formulaire Web, je publie la clé de session sur l’application MVC:

 protected void LinkButton1_Click(object sender, EventArgs e) { Session["myvariable"] = "dan"; ssortingng sessionKey = HttpContext.Current.Session.SessionID; //Followed by some code that posts sessionKey to the other application } 

Je le reçois ensuite dans l’application MVC et essaie d’utiliser la même session comme ceci:

 [HttpPost] public void Recieve(ssortingng sessionKey ) { var manager = new SessionIDManager(); bool redirected; bool IsAdded; manager.SaveSessionID(HttpContext.ApplicationInstance.Context, Id, out redirected, out IsAdded); var myVar = Session["myvariable"]; } 

La clé est en cours de publication mais la session ne semble pas être chargée dans l’application MVC, c.-à-d. Que sessionKey est null. Est-ce que ce que j’essaie de faire peut être fait?

Je l’ai fait de cette façon:

Fondamentalement, l’idée est que les deux applications utilisent .net sessionState natif stocké dans sqlserver. En utilisant la même clé d’ordinateur et en modifiant légèrement une procédure stockée, les deux applications peuvent partager les clés de session et / ou l’authentification de formulaires.

Les deux applications feraient quelque chose comme ça dans leur fichier web.config:

   

L’état de session db doit être configuré sur un serveur de firebase database, ce que les deux applications peuvent voir.

Documents pour ce faire: http://msdn.microsoft.com/en-us/library/ms229862(VS.80).aspx

Commande à exécuter: C: \ Program Files (x86) \ Microsoft Visual Studio 9.0 \ VC \ bin> aspnet_regsql.exe -E -ssadd –sstype p -S. \ SQLEXPRESS

Procédure stockée (TempGetAppID):

  @appId int OUTPUT AS -- start change -- Use the application name specified in the connection for the appname if specified -- This allows us to share session between sites just by making sure they have the -- the same application name in the connection ssortingng. DECLARE @connStrAppName nvarchar(50) SET @connStrAppName = APP_NAME() -- .NET SQLClient Data Provider is the default application name for .NET apps IF (@connStrAppName <> '.NET SQLClient Data Provider') SET @appName = @connStrAppName -- end change SET @appName = LOWER(@appName) 

Le problème est que les clés de session sont étendues aux applications, donc deux applications ayant la même clé de session ont en fait des sessions séparées.

Vous pouvez faire l’une des deux choses suivantes:

  1. Placez les deux applications en tant que répertoire virtuel sous une application IIS commune. Je ne pense pas que ce soit une bonne idée, mais cela fonctionnera.

  2. Déployez votre propre solution de données de session pour les données que vous souhaitez partager. Si possible, utilisez la firebase database principale comme stockage commun.

Basé sur le commentaire de Justin, le simple fait de clarifier l’option 2 ne fait pas référence à la gestion de l’état SQL pour les sessions hors processus. Je veux dire pour vous de gérer manuellement les données partagées pour les deux sessions, en utilisant éventuellement une firebase database.

Vous pouvez utiliser une clé machine commune pour générer le même identifiant de session dans les deux applications pour un utilisateur donné. En outre, vous devez également planifier le stockage des sessions des deux applications dans un magasin commun tel que le service d’état ASP.NET ou un cache dissortingbué.

Vous pouvez utiliser le cache dissortingbué NCache qui prend en charge la fonctionnalité de partage de session entre différentes applications. Vous spécifiez le même tag ID d’application pour les deux applications dans les parameters d’état de session, ce qui vous permet de partager l’object de session à condition que vous ayez le même identifiant de session généré pour les deux applications.