1

ASP.NET MVC 3アプリケーションで、ログオンアクションの[記憶する]チェックボックスをオンにすると、永続的なCookieが作成されるため、ブラウザーを閉じて再度開くと、引き続きログインする必要があります。

FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);

Fiddlerを使用すると、セッションIDが次のように送信されていることがわかります。

Request sent 342 bytes of Cookie data:

ASP.NET_SessionId=<Session ID>; .ASPXAUTH=<Auth String>

しかし、ブラウザを閉じて再度開くと、まだログインしていますが、リクエストはセッションIDを送信しません。

Request sent 298 bytes of Cookie data:

.ASPXAUTH=<Auth String>

次にResponse.Write(Session.SessionID)、アクションを入力します。これは、ブラウザを再度開いた後、ページを更新するたびに変更されます。ブラウザを閉じない場合、セッションIDは更新のたびに同じままです。

StateServerで経験したように、これで問題が解決する可能性があると思ったので、セッション状態を保持するためにを使用していInProcます。

4

1 に答える 1

3

これは予想される動作です。承認Cookieの設定の概念とセッションの概念は同じものではありません。ASP.NETのセッションは、セッションがセッションごとのCookieに保存されるため、ユーザーがブラウザーを開いている限り存続することを目的としています。

"... SessionID値は、ブラウザの有効期限が切れていないセッションCookieに保存されます。(http://msdn.microsoft.com/en-us/library/ms178581.aspx)

永続的なセッションを持つことは、一種の悪い考えです。セッションの通常のケースは、セッションがメモリに保存されていることを忘れないでください。1週間ログインしていないユーザーのセッションをメモリに保存しますか?長く保存しようとしているあらゆる種類の「セッション」データは、セッションではなく、永続データストア(読み取り:データベース)に保存する必要があります。

コメントに基づいて更新

私はあなたがこのようなことをすることを提案するかもしれません:

public string GetMyCompany(){
  return Session["MyCompany"] = Session["MyCompany"] ?? GetMyCompanyFromDatabase();
}
于 2012-04-20T13:41:57.143 に答える