2

以下に示すように、Asp.Net MVC アプリケーションでフォーム認証を使用しています。

コード

public void SignIn(string userName, bool isCookiePersistent)
        {

            FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1, userName, DateTime.Now, DateTime.Now.AddDays(14),
                createPersistentCookie, string.Empty);

            HttpCookie authCookie = FormsAuthentication.GetAuthCookie(userName, isCookiePersistent);
            if (authTicket.IsPersistent)
            {
                authCookie.Expires = authTicket.Expiration;
            }

            authCookie.Value = FormsAuthentication.Encrypt(authTicket);
            HttpContext.Current.Response.Cookies.Add(authCookie);
        }

public void SignOut()
        {
            FormsAuthentication.SignOut();
        }

問題: 問題は、フォーム認証のタイムアウトを 4 時間に設定した場合でも、ユーザーがログイン後 30 分後にログイン ページにリダイレクトされることです。

web.configに含めたり除外したりしてみましSessionSateたが、注意が必要です。SessionStateそれでも問題は同じままです。これが私の以下のweb.cofigコードです。

Web.config (sessionState 要素なし)

  <authentication mode="Forms">
      <forms loginUrl="~/LogOn/LogOn" requireSSL="false" timeout="240" defaultUrl="~/Home/Home" name="__appcookie" path="/" slidingExpiration="true" ticketCompatibilityMode="Framework40" protection="All">
      </forms>
    </authentication>

Web.config (sessionState 要素を使用)

<sessionState timeout="240"></sessionState>
 <authentication mode="Forms">
          <forms loginUrl="~/LogOn/LogOn" requireSSL="false" timeout="240" defaultUrl="~/Home/Home" name="__appcookie" path="/" slidingExpiration="true" ticketCompatibilityMode="Framework40" protection="All">
          </forms>
        </authentication>

web.configsessionStateにを含めることが本当に重要であることを誰か教えてください。sessionTimeoutアプリケーション全体でしか使用できないformAuthenticationのですか?

使用sessionStateしてもしなくても、 だけでもform authentication、ユーザーはアプリケーションにログインしてから 30 分後にログイン ページにリダイレクトされました。(しかし、私はすでに 240 分を として設定していますform authentication timeout)。

どなたか、これに関するアイデアや解決策を教えてください。

前もって感謝します!

4

3 に答える 3

1

forms ticketCompatibilityMode="Framework40"、チケットの有効期限が UTC として保存されることを指定します。デフォルトではFramework20、チケットの有効期限が現地時間として保存されるように指定されています。ticketCompatibilityMode が Framework40 のときに FormsAuthenticationTicket の有効期限を手動で設定している場合はDateTime.Now、ローカルと UTC ( DateTime.Nowvs. DateTime.UtcNow) の間に切断があります。

それは私が最近手に入れた落とし穴です。詳細については、この MSDN の記事を参照してください

于 2014-05-28T01:24:01.500 に答える
0

フォーム認証 Cookie のデフォルト時間は 30 分です。これにより、構成に問題があると思われます。テストのためだけに構成を簡素化してみていただけますか?

<authentication mode="Forms">
    <forms loginUrl="~/LogOn/LogOn" timeout="240" protection="All" />
</authentication>
于 2012-11-19T20:29:16.223 に答える
0

IIS でセッション タイムアウト値を上げてみてください。そのデフォルト値は 20 分です。web.config でセッション タイムアウトを 4 年に設定することもできますが、IIS セッション タイムアウトがそれを上書きします。ユーザーがサイトでアクティブでないと仮定すると...

于 2012-11-19T17:44:22.600 に答える