2010-09-28 4 views
3

J'ai créé un site Web avec ASP.NET 2.0 et j'utilise une variable de session pour déterminer si un utilisateur a rempli un formulaire de vérification d'âge. Tout fonctionne comme prévu (je peux lire la variable de session sur toutes les pages) jusqu'à ce qu'un utilisateur accède à un répertoire virtuel. Quand ils le font, la page ne peut pas lire la variable de session.IIS, état de session et répertoires virtuels

Après de nombreuses recherches, j'ai jusqu'à présent fait ce qui suit.

  1. Allumez le service d'état ASP.NET
  2. Ajout d'un nœud de sessionState à mes fichiers web.config, en changeant le mode StateServer (pour le site Web et répertoire virtuel).

    < sessionState mode = "StateServer" cookieless = "false" timeout = "20" stateConnectionString = "TCPIP = 127.0.0.1: 42424" />

  3. généré un nouveau machineKey et a ajouté à la fois le site et le répertoire virtuel ...

    < machineKey
    validationKey = "... 128 ..."
    decryptionKey = » .. 0,64 ... » validation = « SHA1 » décryptage = « AES » />

  4. créé un nouveau pool d'applications et en vous que le site Web et il est répertoire virtuel utilisent le même pool d'applications.

Si j'écris sur l'identifiant de session <% = Session.SessionID% > est le même sur les pages et sur le répertoire virtuel (c'est le même sur tout le site). Je ne peux pas obtenir cette variable de session! Est-ce que quelqu'un sait quoi d'autre je peux essayer de faire fonctionner cela?

Merci.

Répondre

1

Répertoire virtuel différent = l'application et les applications différentes ne partagent pas les données de session entre elles. Peut-être une refonte de vos applications pour éviter cela?

Voici une solution possible pour partager des données de session entre des applications ASP.NET.

Passing session data between ASP.NET Applications

+0

J'ai réfléchi à la définition d'un cookie au lieu d'une variable de session, car tout est sous le même nom de domaine, mais il semble qu'il devrait y avoir une solution. Je pensais que la chose de l'état de la session fonctionnerait ... pourquoi cela fonctionne-t-il pour les fermes de serveurs, mais pas un répertoire virtuel? – Craig

+0

@Craig - Je n'ai jamais travaillé avec des fermes de serveurs mais je pense que la réponse est toujours que l'application (répertoire virtural) est la même, juste située sur différents serveurs. – DaveB

0

De tout ce que je peux dire, il est impossible de faire ce que je voulais faire. Pire, j'ai décidé d'utiliser des cookies à la place des variables de session, pensant que puisque les cookies sont créés et maintenus par le client et basés sur le domaine, cela fonctionnerait. Malheureusement, d'une manière ou d'une autre, avec C#/ASP.NET, même les cookies ne peuvent pas être partagés. J'ai donc dû utiliser C# pour insérer Javascript pour créer des cookies afin que je puisse faire ce que je voulais. Le résultat final est une solution inélégante à ce qui devrait être un problème simple (IMHO).

+1

Les cookies peuvent être partagés en définissant la machineKey –

Questions connexes