4

FormsAuthentication チケットを生成し、それを Cookie に保存しています。これを MVC AuthorizeAttribute と共に使用して承認を提供します。現在、「サインインしたままにする」チェックボックスがオンになっている場合、Cookie の有効期限が切れないようにしています (テスト目的で、cookie.expires を現在 + 1 年に変更しています。サインインしたままにするためにチェックを入れました)。

ただし、チケットの作成時に Cookie が永続的であるように設定しても、タイムアウト期間が過ぎるとチケットは機能しなくなります。

AuthTicket を作成するコードは次のとおりです。

var now = DateTime.UtcNow.ToLocalTime();
FormsAuthenticationTicket authTicket = new System.Web.Security.FormsAuthenticationTicket(1, username, now, now.Add(FormsAuthentication.Timeout), rememberMe, username, FormsAuthentication.FormsCookiePath);
string encryptedTicket = System.Web.Security.FormsAuthentication.Encrypt(authTicket);
return encryptedTicket;

これは、Cookie として設定したのと同じ encryptedTicket です。FormsAuthentication タイムアウトを過ぎてもこのチケットを許可する方法を知っている人はいますか? FormsAuthentication Timeout 時間を手動でいじる必要がありますか?

4

1 に答える 1

4

Cookie が保持される時間は、ログインが有効である時間と同じではありません。基本的に、永続的な Cookie は「ブラウザを閉じた後もこの Cookie を保持する必要があるかどうか」であり、このログインの有効期間とは無関係です。これを使用して、たとえばユーザー名を保存し、ユーザーが戻ってきたときにこの情報を再入力する必要がないようにすることができます。

Cookie は有効であるが、Cookie 内でログインが期限切れになっている場合は、再度ログインする必要があります。ログインをより長く持続させたい場合<forms>は、web.config でタグの時間を延長するか、コードでこれを行う必要がありますが、有効期限を延長/短縮したい場合は再コンパイルする必要があります。

これらの概念についてもう少し詳しく説明しているサイトがいくつかあります。

http://software-security.sans.org/blog/2012/04/05/forms-authentication-remember-me-its-hard-not-too

FormsAuthentication.SetAuthCookie() メソッドによる Cookie の混乱

于 2012-08-06T21:53:12.643 に答える