Avec MVC 2, comment puis-je arrêter une application de se connecter à déconnecter l'utilisateur dans une seconde application?

StackOverflow https://stackoverflow.com/questions/9301645

Question

Dans VS2010 J'ai deux MVC 2 applications web basées dans la même solution qui partagent également un projet d'installation commun. Une application est un utilitaire de configuration pour la configuration des utilisateurs et des variables dans l'application adverse. Lors de l'installation, les deux répertoires IIS ressemblent à ceci sur le navigateur de l'utilisateur: App1: http: // localhost / app1 / auth / Connexion App2: http: // localhost / App1 / App2 / auth / Connexion

Le problème que je vais avoir est quand l'utilisateur a à la fois des applications ouvertes en même temps, et se déconnecte d'un d'entre eux, ils sont déconnectés de l'application adverse. Ceci est un problème mineur, mais je l'ai été chargé de le corriger.

D'après ce que je peux dire, les deux applications doivent se partager le même objet session, parce que la méthode de commande dans chaque contrôleur déconnexion invoque Session.Abandon ().

Seuls deux contrôleurs ont la possibilité de déconnecter un utilisateur; voici le constructeur est de contrôleur de ceux:

App1: App1.Controllers espace de noms

/// <summary>
/// Functionality related to Assets
/// </summary>
public class AssetsController : Controller
{
private IConfig _config = null;
private IProfileRepository _profiles = null;
private IInspectionRepository _inspections = null;
private ICustomLabelsFactory _labels = null;
private IValidateRepository _validator = null;

/// <summary>
/// Create an instance of the AssetsController which uses the db.
/// </summary>
public AssetsController() : this(Config.Current, new ProfileRepository(Config.Current), new InspectionRepository(), new CustomLabelFactory(), new ValidateRepository()) { }

/// <summary>
/// Create an instance of the AssetsController with the given
/// IInspectionRepository implementation.
/// </summary>
/// <param name="inspections">IInspectionRepository implementation.</param>
public AssetsController(IConfig config, IProfileRepository profiles, IInspectionRepository inspections, ICustomLabelsFactory labels, IValidateRepository validator)
    : base()
{
    ViewData["_Module"] = "Assets";

    _config = config;

    _profiles = profiles;
    _profiles.ModelState = ModelState;

    _inspections = inspections;
    _inspections.ModelState = ModelState;

    _labels = labels;
    _labels.ModelState = ModelState;

    _validator = validator;
    _validator.CustomLabels = _labels.Assets;
    _validator.ModelState = ModelState;
}

App2: App1.App2.Controllers espace de noms

/// <summary>
/// Handles login/logout functionality
/// </summary>
public class AuthController : Controller
{
private ILoginService _login;
private IUtilityRepository _utility;

/// <summary>
/// Creates the Auth controller using the default User Repository which
/// uses the database.
/// </summary>
public AuthController() : this(new LoginService(), new UtilityRepository()) { }

/// <summary>
/// Creates the Auth controller with the given User Repository.
/// </summary>
/// <param name="userRepository">IUserRepository implementation.</param>
public AuthController(ILoginService loginService, IUtilityRepository utility)
    : base()
{
    ViewData["_Module"] = "Login";

    _login = loginService;
    _login.ModelState = ModelState;

    _utility = utility;
    _utility.ModelState = ModelState;
}

Je pourrais être aboyer le mauvais arbre où commencer à chercher le code, mais j'espère que quelqu'un peut voir ici quelque chose d'évident que je ne peux pas. Ou, peut-être que quelqu'un peut me dire comment faire différemment de sorte qu'il n'y a pas un objet de session partagée impliquée. Je travaille sur et désactiver cette fonction pour la meilleure partie de cette semaine, de sorte que toute aide offerte sera grandement appréciée.

Était-ce utile?

La solution

vous pouvez configurer chaque application pour utiliser une base de données de session différente dans votre web.config

EDIT: quelque chose comme

<sessionState mode="SQLServer" sqlConnectionString="Data Source=.\SQLEXPRESS;User Id=test;Password=test;Application Name=AppName"  />
    <machineKey
validationKey="SOMEKEY"
validation="SHA1" decryption="AES"
/>

Où somekey est différent pour chaque application

Autres conseils

Un simple, paresseux, les paramètres IIS évitaient solution est d'ouvrir chacun dans un autre navigateur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top