0

mvc3アプリケーションでセッションを保存するためにInProcモードを使用していましたが、IISが約20分ごとに再起動したため、保存認証がSQLServerに変更されました。データベースへの接続は正常で、セッションは保存されていますが、認証は再起動後に失われるほど長くは続きません

Webconfig

<sessionState mode="SQLServer" timeout="2880" allowCustomSqlDatabase="true"
    sqlConnectionString="data source=mydatasource;initial catalog=mydb;user id=userid;password=password;
integrated security=False;MultipleActiveResultSets=True;"
cookieless="true" />

<authentication mode="Forms">
        <forms loginUrl="~/Account/Login" timeout="2880" slidingExpiration="true" protection="All" cookieless="UseCookies"/>
    </authentication>

私のデータベースのスクリーンショット

4

2 に答える 2

0

さて、私はついに本当の問題が何であるかを知りました。machineKeyのランダムジェネレーターがあり、IISを再起動すると、新しいmachineKeyが生成されたため、認証Cookieを復号化できませんでした。解決策は簡単です->低レベルのセキュリティサイトがある場合は静的キーを使用してください

于 2013-03-15T18:56:06.113 に答える
0

認証とセッションは2つのまったく異なるものです。

  1. Forms Authentication
  2. ASP.NET Session

それらを区別することは非常に重要です。1つ目は、Webサイトで認証されたユーザーを追跡するために使用されます。これは<authentication>、Cookieのタイムアウトと有効性を指定できるweb.configのセクションで構成されます。

一方、ASP.NETセッションは独立して使用できます。フォーム認証の。あなたの例では、アプリケーションで両方を使用しているようです。したがって、両方のタイムアウト値が同じであることを確認してください。

私が見ることができることから、ASP.NETセッションのタイムアウトを2880に設定しました。フォーム認証Cookieも同じ量に構成されていることを確認してください。

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

フォーム認証を使用していないが、認証されたユーザーを追跡するために他のメカニズムを使用している場合、問題は別の場所にある可能性があります。

于 2013-03-14T08:17:49.150 に答える