0

カスタムの「rememberme」の実装に次のコードを使用しています。

        FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, member.UserName, DateTime.Now, DateTime.Now.AddHours(24), true, dataString);
        string encTicket = FormsAuthentication.Encrypt(ticket);
        HttpCookie faCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
        faCookie.Expires = ticket.Expiration;
        HttpContext.Current.Response.Cookies.Add(faCookie);

ただし、一部のユーザーはログインできません(ログイン後もログインページが表示されます)。
この問題は、クライアントの日付がサーバーとは異なる(大きい)ことが原因であると思われます。それで、「私を覚えている」実装のための最良で正しい解決策は何ですか。
この問題を解決するには、次の行を削除する必要があります。

faCookie.Expires = ticket.Expiration;

この行を削除した後、ユーザーがブラウザーを閉じるときは、サインインする必要があります(Cookieは保持されません)。解決策は何ですか?

4

1 に答える 1

0

あなたができることは、クライアントの日付/時刻を取得し、サーバーの時刻ではなく、それをCookieに使用することです。

これを行うための良い方法を示す素晴らしい答えがここにあります。基本的に、隠しフィールドにクライアントの日付/時刻を入力し、ポストバックで取得します。

マスターページにこの非表示フィールドを設定して、クライアントの日付/時刻をいつでも利用できるようにすることができます。ログイン画面だけでなくてもかまいません。

于 2013-01-01T21:25:54.830 に答える