0

メイン Web サイトのサブドメインasp.net MVC 3.0でホストされているWeb サイトがあります。バージョンは に設定されています。Asp.net.Net 4.0 integrated pipeLine

フォーム認証の設定は次のとおりです。

<authentication mode="Forms">
  <forms
          cookieless="UseCookies"
          defaultUrl="~/home"
          enableCrossAppRedirects="false"
          path="/"
          requireSSL="false"
          loginUrl="~/account/login"
          protection="All"
          timeout="120"
          slidingExpiration="true"
          name=".SubDomainAuthCookie"></forms>
</authentication>

しかし、毎回数分後ログアウトます! ホスト管理者は、アプリケーション プールがリセットされる不適切なコーディングまたは負荷の高いタスクが原因である可能性があると述べていますが、これはEF ORMを使用した単純な mvc Webサイトです。どうすればいいのかわからない!この状況の考えられる原因として何を探すべきですか?

アップデート :

チェックした後、それが問題であることApplication_Startがわかりました。ログに記録したところ、ログアウトするたびにログが追加されました。Application_Start()

12/6/2012 12:14:03 PM ==> Application started
12/6/2012 12:16:35 PM ==> Application started
12/6/2012 12:22:59 PM ==> Application started

奇妙ですが、本物です。ロジックに複雑なものや重いものはありません。EF が問題になる可能性があります。アプリケーション プールがリセットされる原因となる大量のメモリ/CPU を消費しますか?

4

4 に答える 4

3
  • name=".SubDomainAuthCookie" を使用しているアプリケーションが他にないことを確認してください。これらのアプリケーションは、Cookie を上書きする可能性があります。
  • ログインページでFormsAuthentication.SetAuthCookie呼び出す前に使用していますか? FormsAuthentication.RedirectFromLoginPageそうでない場合は、認証 Cookie が正しく設定されていない可能性があります。
  • アプリのリサイクルが多すぎるかどうかを確認するには、global.asax.cs の Application_End をログに記録してみてください。

    protected void Application_End(object sender, EventArgs e) { / Application_End をログに記録します/ }

    以下の回答の 1 つで @ZippyV が述べたように、この背後にある理由は、IIS がデフォルトで、MachineKey と呼ばれる AppPool リサイクルごとに、復号化と認証 Cookie コンテンツ (およびその他のもの) の検証のためのキーのペアを自動的に生成するように設定されているためです。 . この質問にも記載されています

    このキーが変更されると、すべてのブラウザーに保存されている認証 Cookie の内容が読み取れなくなり、認証が失われます。

    最も簡単な解決策は、web.config で静的 MachineKey を使用することです。

  • また、Cookie を親ドメインに設定してみてください。詳細はこちら

于 2012-12-06T07:01:19.053 に答える
1

私のホスティングプロバイダーが私のサイトのプロセスを頻繁にリサイクルしたときにも、この問題が発生しました。暗号化/復号化キーが変更されたため、何らかの理由で認証Cookieが無効になります。そのため、サイトは認証Cookieを読み取ることができなくなります。

この問題を解決するには、web.configでキーを指定して、ホスティングプロバイダーがキーを変更できないようにします。

  1. http://aspnetresources.com/tools/machineKeyにアクセスして、ボタンをクリックします
  2. 生成されたタグをコピーします
  3. web.configファイルを開き、生成されたタグを内部に貼り付けます<system.web>
于 2012-12-06T13:34:57.830 に答える
0

また、ログイン中に生成された Cookie の有効期限を設定したいと考えています。フォーム認証では、これを使用する必要があります。

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, //Here Userinformation, DateTime.Now, DateTime.Now.AddDays(1), false, string.Empty);

ここでは、Cookie の有効期限を DateTime.Now.AddDays(1) (ログイン日 + 1 日) に設定しているため、ログイン時間が長すぎます。したがって、作成されたチケットは、ログインした翌日に期限切れになります。

そして Web.Config で

  <authentication mode="Forms">
  <forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>

久々にログインできるようになりました。

それが役に立てば幸い!!!

ログインの作成と有効期限の詳細については、これらのリンクを確認してください。

http://www.hanselman.com/blog/WeirdTimeoutsWithCustomASPNETFormsAuthentication.aspx

http://codeasp.net/blogs/vivek_iit/microsoft-net/848/forms-authentication-timeout-vs-session-state-timeout

于 2012-12-06T09:13:55.173 に答える
0

SessionState の値を確認しましたか? デフォルト値は 20 分です。フォーム認証チケット以上に更新する必要があります。

構成ファイルに次のタグを追加/更新してください。

**<sessionState timeout="120" />**
于 2012-12-06T10:05:28.960 に答える