none
MVCで1つのプロジェクトを置きその階層下にもう一つプロジェクトを構成した時のaspnetDBについて RRS feed

  • 質問

  • お世話になります。

    レンタルサーバー上にプロジェクト①1つ構成しそのプロジェクトの階層下にさらに1つのプロジェクト②を配置しています。

    この時のログインのデータベース(aspnet-XXXX.mdf)がApp_Data内に作成されますが、この時、プロジェクト②の App_Dataには作成されずプロジェクト①のログインデータベースが有効になっているようです。

    この時、別々のログイン用のデータベースを構築できますか?

    Web.config に

      <connectionStrings>
        <add connectionString="metadata=res://*/UserModel.csdl|res://*/UserModel.ssdl|res://*/UserModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=アドレス;initial catalog=aspnet-xxxxxxr-20191121;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" name="Entities2" providerName="System.Data.EntityClient" />

    としても効果ないようです。

    Windows Server 2016 DataCenter MVC(多分5.0) Management Studio 14.0 SQL Server 2017

    開発環境 VS2015 C# MVC Windows10

    2019年11月25日 3:06

回答

  • > 開発時にいつものように作成しただけです。これを設置する段階でこの形になりましたが、これだと何か問題があるのでしょうか?

    普通は問題があるから指摘しているのです。問題が無いとするとあなたの環境はかなり特殊なものようで、違う世界に住んでいるようなあなたの話についていくことは誰もできないと思います。改善する気はないようですので自分はもうギブアップです。
    • 回答としてマーク ferret001 2019年11月27日 0:48
    2019年11月26日 12:25

すべての返信

  • いつもそうなんですが、いろいろ不明点が多すぎです。どういう情報を提供すべきか、もっとよく考えて質問してください。

    Visual Studio のテンプレートを使ったプロジェクトの ASP.NET Identity 2 のクッキーベースのユーザー認証と理解してます。違ったらどう違うのか書いてください、

    運用環境で、

    > この時のログインのデータベース(aspnet-XXXX.mdf)がApp_Data内に作成されますが

    とか、接続文字列が、

    > connectionString="metadata=res://*/UserModel.csdl|res: ...

    と DB First で EDM を作ったようになっているのが解せませんが、とりあえずそれらはちょっと置いておいて・・・

    > 別々のログイン用のデータベースを構築できますか?

    ということは、今は認証クッキーが ① と ② で共有できているが、それを別々にしたいということであればクッキーの名前を別々にして試したらどうなりますか?

    2019年11月25日 5:37
  • 質問の意味を誤解してたかもしれません。

    基本的にやりたいことは ① と ② で認証クッキーを共有するということ、即ち ① でログインしたら ② に遷移してもログイン状態が保持される、逆に ② でログインしたら ① に遷移してもログイン状態が保持されるということですか?

    そうであれば、

    > 別々のログイン用のデータベースを構築できますか?

    ということは必要なく、もともとある ① 用のデータベースを ② で共有します。

    ② では接続文字列を ① と同じにし同じデータベースに接続できるようにします。

    そして、machineKey の設定を ① と ② で完全に同じにします。

    そのあたりは旧来のフォーム認証を使用していた ASP.NET Web アプリと同じです。

    アプリケーション間のフォーム認証
    https://docs.microsoft.com/ja-jp/previous-versions/visualstudio/visual-studio-2008/eb0zx8fc(v=vs.90)?redirectedfrom=MSDN

    2019年11月25日 6:49
  • お世話になります。

    説明がうまくできていないようで申し訳ありません。

    「認証クッキー」なる言葉を初めて目にしましたが、

    http://surferonwww.info/BlogEngine/post/2011/12/03/Persistent-or-non-persistent-Forms-authentication-cookie.aspx」で、少しわかった気がします。

    ですが、クッキーの名前を変えるとは、どこで、どのタイミングで?、一方のアプリで、そこにある全てのプロジェクトで行うのでしょうか?

    Set-Cookie・・・で、変更できそうですが・・・

    2019年11月25日 7:11
  • 話が通じてますか? 私の 2 つめのレスを読んでもらってますか? ホントにクッキーの名前を変えることであなたのやりたいことが実現できるんですか? 書き込む前に、そのあたりをよく考えてください。
    2019年11月25日 8:47
  • お世話になります。

    話が通じてますか? 私の 2 つめのレスを読んでもらってますか?

    見る前の投稿でした。

    >① と ② で認証クッキーを共有するということ、即ち ① でログインしたら ② に遷移してもログイン状態が保持される、逆に ② でログインしたら ① に遷移してもログイン状態が保持されるということですか?

    今がそれに近い状態です。①と②でログインを共有したいのでなく、それぞれを別の顧客用に設定したいと考えています。

    ①と②で顧客用のデータベースをそれぞれ別に「作成する」と考えています。ログインできるユーザーは、両方でなく一方のみとし、両方ログインしたいときは、それぞれに登録してもらうつもりでいます。

    よろしくお願いします。

    2019年11月25日 23:42
  • > ①と②で顧客用のデータベースをそれぞれ別に「作成する」と考えています。

    それなら単純にそうして、① と ② は接続文字列を変えて別に作成されたデータベースに別々に接続するようにすれば、それ以外は何もしなくても、上の私のレスで書いたクッキー名の変更なども必要なく、デフォルトの設定のままで、

    > ログインできるユーザーは、両方でなく一方のみとし、両方ログインしたいときは、それぞれに登録してもらうつもりでいます。

    は実現できるはずです。

    何が問題・課題なのか分かりません。それをここに書いてあること以外は何も知り得ない第三者に分かるように書いてください。

    あと、最初の私のレスで指摘した、

    運用環境で、

    > この時のログインのデータベース(aspnet-XXXX.mdf)がApp_Data内に作成されますが

    とか、接続文字列が、

    > connectionString="metadata=res://*/UserModel.csdl|res: ...

    と DB First で EDM を作ったようになっている・・・と言う点についてもクリアにしてください。
    2019年11月26日 1:01
  • 【追記】

    一つ注意点があるのを失念してましたので追記しておきます。

    > ログインできるユーザーは、両方でなく一方のみとし、両方ログインしたいときは、それぞれに登録してもらうつもりでいます。

    今回質問者さんのケースでは ① ② は同じドメインに属することになるので、① にも ② にも登録してあるユーザーが、例えば、まず ① にログインし、そのまま ② に移動して ② でログインすると、① の認証チケット/クッキーは失われてしまいます。逆も同様です。

    何故ならデフォルトでは認証クッキーの名前が同じになるので、上記の例で言うと、① にログインし、そのまま ② に移動して ② でログインすると ① の認証クッキーの中身が ② の認証チケットで上書きされてしまうからです。

    普通は一旦ログインすれば、ブラウザを閉じるかクッキーを削除しない限り、サイトから離れても認証チケット/クッキーは保持されるので、再びそのサイトを訪れてもログイン操作をする必要はありません。それが望みであれば、認証クッキーの名前を ① と ② で別にする必要があります。
    2019年11月26日 5:37
  • お世話になります。

    >> この時のログインのデータベース(aspnet-XXXX.mdf)がApp_Data内に作成されますが
    > とか、接続文字列が、
    >> connectionString="metadata=res://*/UserModel.csdl|res: ...
    >と DB First で EDM を作ったようになっている・・・と言う点についてもクリア

    開発時にいつものように作成しただけです。これを設置する段階でこの形になりましたが、これだと何か問題があるのでしょうか?

    この形とは、「プロジェクト①1つ構成しそのプロジェクトの階層下にさらに1つのプロジェクト②を配置しています」です。

    2019年11月26日 8:29
  • > 開発時にいつものように作成しただけです。これを設置する段階でこの形になりましたが、これだと何か問題があるのでしょうか?

    普通は問題があるから指摘しているのです。問題が無いとするとあなたの環境はかなり特殊なものようで、違う世界に住んでいるようなあなたの話についていくことは誰もできないと思います。改善する気はないようですので自分はもうギブアップです。
    • 回答としてマーク ferret001 2019年11月27日 0:48
    2019年11月26日 12:25
  • > 改善する気はないようですので自分はもうギブアップです。

    質問している件についてわからないので、私の返答が意に沿わないかもしれません。

    改善しないのではなく、ご指摘の内容が理解できていません。

    ただそれだけです。

    お世話になりました。

    2019年11月27日 0:48
  • > 改善しないのではなく、ご指摘の内容が理解できていません。

    改善できてないのは情報不足という点なのですが認識いただいているでしょうか? 一番最初の私のレスで書いた、

    "いつもそうなんですが、いろいろ不明点が多すぎです。どういう情報を提供すべきか、もっとよく考えて質問してください。"

    ・・・ということです。

    そう言っても分からないかもしれませんので、具体例を挙げて言うと、

    > この時のログインのデータベース(aspnet-XXXX.mdf)がApp_Data内に作成されますが

    と書いてありますが、普通、運用環境(IIS + SQL Server)ではそれでは動かないです。(開発環境で IIS Express と LocalDB を使う場合は話は別です)

    接続文字列が、

    > connectionString="metadata=res://*/UserModel.csdl|res: ...

    と DB First で EDM を作った時のようになることもありません。

    もしそれでも動いているということであれば、あなたの環境はかなり特殊で、その情報が提供されてない状況で議論をしても意味がないということです。

    もう一度お願いしますが、いろいろ不明点が多すぎですので、どういう情報を提供すべきか、もっとよく考えて質問してください。
    2019年11月27日 1:33