С MVC 2, как я могу остановить выход из одного приложения от выхода пользователя из другого приложения? - PullRequest
0 голосов
/ 16 февраля 2012

В VS2010 у меня есть два веб-приложения на основе MVC 2 в одном решении, которые также используют общий проект установки.Одно приложение - это утилита конфигурации для настройки пользователей и переменных в противоположном приложении.После установки две папки IIS в браузере пользователя выглядят следующим образом: App1: http://localhost/App1/Auth/Login App2: http://localhost/App1/App2/Auth/Login

Проблема, с которой я сталкиваюсь, заключается в том, что у пользователя открыты оба приложения нав то же время, и выходит из одного из них, они также вышли из противоположного приложения.Это небольшая проблема, но мне было поручено исправить ее.

Из того, что я могу сказать, два приложения должны совместно использовать один и тот же объект Session, потому что метод команды выхода из системы в каждом контроллере вызывает Session.Отказаться ().

Только два контроллера имеют возможность выхода пользователя из системы;вот конструктор из этих контроллеров:

App1: пространство имен App1.Controllers

/// <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

/// <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;
}

Возможно, я лаюнеправильное дерево о том, с чего начать смотреть на код, но я надеюсь, что кто-то увидит здесь что-то очевидное, чего я не могу.Или, может быть, кто-то может сказать мне, как сделать это по-другому, чтобы не был задействован общий объект Session.Я работаю над этим и выключаюсь большую часть этой недели, поэтому любая предложенная помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 16 февраля 2012

Вы можете настроить каждое приложение для использования другой базы данных сеансов в вашем web.config

РЕДАКТИРОВАТЬ: что-то вроде

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

Где Somekey отличается для каждого приложения

0 голосов
/ 16 февраля 2012

Простое, ленивое решение, позволяющее избежать настройки IIS, - открыть каждый из них в другом браузере.

...