1

FormsAuthentication を使用したログイン システムがあり、ブラウザを閉じて開くときに何らかの理由でログアウトされます。ログインコードを設定する方法は次のとおりです。

            FormsAuthenticationTicket ticket;

                ticket = new FormsAuthenticationTicket(1, tbUsername.Text, DateTime.Now, DateTime.Now.AddYears(1), true, string.Empty, FormsAuthentication.FormsCookiePath);

            string encryptedTicket = FormsAuthentication.Encrypt(ticket);

            HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
            cookie.HttpOnly = true;

            //Add the cookie to the request
            Context.Response.Cookies.Add(cookie);

ご覧のとおり、Cookie がセッション間で永続的になるように設定しました。ここに私の web.config 部分があります:

<authentication mode="Forms">
  <forms slidingExpiration="false" loginUrl="~/Login.aspx" name="BOIGAUTH" defaultUrl="~/Admin/Settings.aspx"/>
</authentication>

また、この特定のアプリケーションでは SessionState が無効になっています。誰が何が悪いのか知っていますか?

ところで、アプリケーション ブラウザを 2 時間以上オンのままにしておくと、Web サイトを操作していなくても、ログインしたままになりました。Cookie は、ブラウザーを閉じるときにのみ失われます。

4

1 に答える 1

5

Cookie に有効期限を設定しない場合、ブラウザー セッションのみの Cookie になり、ブラウザーのすべてのインスタンスを閉じると消えます。

Expiresプロパティで永続化するには、Cookie に有効期限を設定する必要があります。

HttpCookie cookie = new HttpCookie(
   FormsAuthentication.FormsCookieName, encryptedTicket);
cookie.HttpOnly = true;
cookie.Expires = DateTime.Now.AddMinutes(1000);

補足: 閉じるときにすべての Cookie を消去するようにブラウザーが構成されていないことを確認してください。

于 2012-11-28T19:39:21.797 に答える