0

VS2010では、同じソリューション内に2つのMVC 2ベースのWebアプリがあり、これらも共通のセットアッププロジェクトを共有しています。1つのアプリは、反対側のアプリでユーザーと変数を設定するための構成ユーティリティです。インストールすると、2つのIISディレクトリはユーザーのブラウザで次のようになります 。App1:http:// localhost / App1 / Auth / Login App2: http:// localhost / App1 / App2 / Auth / Login

私が抱えている問題は、ユーザーが両方のアプリを同時に開いていて、そのうちの1つからログアウトすると、反対側のアプリからもログアウトされることです。これは小さな問題ですが、私はそれを修正する任務を負っています。

私の知る限り、各コントローラーのlogoutコマンドメソッドはSession.Abandon()を呼び出すため、2つのアプリは同じSessionオブジェクトを共有している必要があります。

ユーザーをログアウトできるのは2つのコントローラーだけです。これらのコントローラーのコンストラクターは次のとおりです。

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オブジェクトが含まれないように、誰かがこれを別の方法で行う方法を教えてくれるかもしれません。私は今週の大部分でこれにオンとオフで取り組んできたので、提供されたどんな助けも大いに感謝されるでしょう。

4

2 に答える 2

0

単純で怠惰なIIS設定を回避する解決策は、それぞれを異なるブラウザーで開くことです。

于 2012-02-15T21:49:25.390 に答える
0

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が異なる場合

于 2012-02-15T22:04:40.430 に答える