4

MVC サイトに非常に基本的な Asp.net フォーム認証メカニズムを実装しようとしています。私が得ている問題は、認証 Cookie が 1 年後に期限切れになるように設定されているのに、こんなに長い時間後に期限切れになりたくないということです。これが私のコードの一部です:

web.config

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

コントローラ

...
FormsAuthentication.SetAuthCookie(username, false);
...

私はこの答えを見つけました(この質問は似ていますが、私の場合はタイムアウトは発生しません)が、これがクッキーを期限切れにする唯一の方法ですか、それともここで何か間違っていますか?

Cookie を表示すると、数分後に有効期限が切れるはずなのに、1 年後に有効期限が切れるように設定されています。なぜですか?

私が望むのは、ユーザーがしばらくするとログアウトされ、formsタグに有効期限を設定するとうまくいくと思いましたか?

4

1 に答える 1

10

解決策を見つけた後、ほぼ1か月、100回のビューと回答がありません。

まず、 で指定されたタイムアウトはweb.config、Cookie が永続的として設定されている場合にのみ機能します。つまり、永続的な Cookie も期限切れになる可能性があります。最初は、永続的な Cookie は期限切れにならないという誤った想定をしていました。実際、Cookie を常に永続的に設定していれば、元のコードは機能していたはずです。

第二に、上記のコメントで提案されているように、メンバーシップ プロバイダーがフォーム認証を機能させる必要はないと考えています。

認証Cookieを作成する方法は次のとおりです。

HttpCookie authCookie = FormsAuthentication.GetAuthCookie(username, isPersistent);
if (!isPersistent)
{
    //this is because if it was not set then it got 
    //automatically set to expire next year even if 
    //the cookie was not set as persistent
    authCookie.Expires = DateTime.Now.AddMinutes(15);
}

Response.Cookies.Add(authCookie); 

これに代わるものがあれば教えてください。

于 2013-11-06T19:30:44.627 に答える