フォームの認証を使用するアプリがあり、ユーザーがログインすると、ユーザーの実際の名前を取得して、次のようにセッション変数に割り当てます。
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
if (ModelState.IsValid)
{
if (Membership.ValidateUser(model.UserName, model.Password))
{
Session["Name"] = client.GetName(model.UserName);
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
return RedirectToAction("Index", "Home");
}
}
}
これは、次のようにインデックスビューに表示されます。
<h3>Welcome, @Session["Name"]</h3>
したがって、私の名前がBobの場合、ビューに「Welcome、Bob」と出力され、これは正常に機能します。しかし、ページから移動するか、ブラウザを閉じて数分後に戻ると、「ようこそ」と出力されるだけなので、これらのセッション変数が破棄されたように見えますが、まだログインしているので、セッションは破棄されませんか?web.configで60分後にセッションを破棄するように設定しました。
<sessionState regenerateExpiredSessionId="true" timeout="60" />
編集
これは、ログイン時に[Remember Me]ボックスをオンにした場合にのみ発生します。これは、Cookieクライアント側を保持しているため、ブラウザを再度開いたときに、ログインしたままですが、新しいセッションIDが作成されResponse.Write(Session.SessionID)
ます。ブラウザを閉じる前のインデックスページとIDは、再度開いたときのものとは異なります。[Remember Me]チェックボックスをオンにしないと、ブラウザを再度開いたときに再度ログインする必要があります