私のASP.NET MVC Webサイトは、私がそうしなければならないと思ったときにサインインしています。アプリケーションプールリサイクル後にセッションクッキーがまだ認証されています
私のWebサーバーはIIS 7.5で、アプリケーションプールはV4.0で、アイドルタイムアウトを20分に設定して統合されています。
ログインすると、Webサイトは「閲覧セッションが終了したら」(永続性がfalseに設定されている)期限切れの認証Cookieを保存します。
サーバー上のIIS上でアプリケーションプールをリサイクル(またはChrome/FF)してからリサイクル(または停止/開始)してブラウザを再度開くと、セッションクッキーが有効なように見えます。
ブラウザを閉じるときにFirefoxとChromeがセッションクッキーを削除しないことを知っています(これにより、中止した場所から開始することができます)が、アプリケーションプールにはセッションが存在しませんリサイクル?セッションデータをデータベースに保存しておらず、web.configにマシンIDの設定がありません。
このCookieはまだ有効ですか?
編集1は - クッキーが設定されているか
クッキー認証オプションは、(私のOWINスタートアップクラスのコンフィギュレーション・メソッドから呼び出される)ConfigureAuthによって設定されています。クッキーオプション:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
CookieName = "MyCookieName",
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
SlidingExpiration = true,
ExpireTimeSpan = TimeSpan.FromDays(7) // this only applies if persistent is true!
});
ユーザーが
await SignInManager.SignInAsync(user, isPersistent, rememberBrowser);
isPersistent
は、ログインフォームの「私を忘れないでください」のチェックボックスから設定されている使用して署名されます。これがチェックされている場合、CookieAuthenticationOptions
のExpireTimeSpanを使用してクッキーが期限切れになります。それがチェックされていない場合、クッキーは "閲覧セッションが終了したとき"に終了します。これは私の質問があるところです。
rememberBrowser
はfalseに設定されています。これは2FAで使用されていますが、私の実装では使用されていません。
AuthenticationManager.SignIn(new AuthenticationProperties()
{
IsPersistent = isPersistent
}, userIdentity);
...再びデフォルトの実装です:
SignInAsync
コールデフォルトの実装です。
AuthenticationManager
は、実際のクッキーを設定します(私は信じています)。
2 - machineKeyを編集しますか?
これをさらに調べると、マシンキーがCookieに保存されているため、プールのリサイクル全体で認証できる可能性があります。 web.configにmachineKeyを定義していないので、これが正しいかどうかはわかりません。
リサイクル時には、これは技術的には不可能です;これは不可能です;正しいアプリケーションをリサイクルしていますか(私に起こった、愚かな) – Ravenix
@Ravenixはい、間違いなく正しいアプリプールをリサイクルします。これが私がログインしている様子を混乱させる理由です。 – Erresen
これは、セッション管理がメモリにないことを意味します。あなたは、セッションがメモリに保存されることを絶対に100%確信していますか? – Ravenix