私はウェブを検索していて、多くの奇妙な答えを見つけました。それらのほとんどすべてを試しました。私の問題はこれです。私のログインページには以下が含まれます:
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, userName, DateTime.Now, DateTime.Now.AddMinutes(min), persistCookie, userid.ToString());
string encTicket = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
cookie.Expires = ticket.Expiration;
Response.Cookies.Add(cookie);
FormsAuthentication.RedirectFromLoginPage(userName, persistCookie);
現在、最小値はユーザーごとに設定されており、個別に設定できます。persistCookie も同様です。
私が理解した後、このコードはweb.configのデフォルト値を上書きする可能性をもたらすはずです。これは30分です。
<authentication mode="Forms">
<forms loginUrl="~/Default/default.aspx" defaultUrl="~/User/UserMain.aspx"/>
</authentication>
min は現在 120 に設定されており、persistCookie が真に設定されすぎています。ログインすると、30分でタイムアウトします。(セッションではないため、どこかに有効期限が設定されています。設定されていない場合、Cookie はセッションベースである必要があるため、ここでの取引のような 120 分も得られません)
簡単にするための私の質問は、値「分」をクッキーの有効期限にする方法です。
これは単純すぎるかもしれませんが、私は現在完全に立ち往生しているので、助けがあれば感謝します.
編集:ログインロジックを次のように変更しました:
FormsAuthenticationTicket fat = new FormsAuthenticationTicket(1, userName, DateTime.Now, DateTime.Now.AddMinutes(min), persistCookie, userid.ToString());
string encTicket = FormsAuthentication.Encrypt(fat);
Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket) { Expires = fat.Expiration });
Response.Redirect(FormsAuthentication.GetRedirectUrl(userName, false));
そして今、それは機能します。しかし、前のものではなく、なぜこれが機能するのか理解できないようです。チケットの作成は同じです。唯一の違いは、オブジェクトの作成後ではなく、HttpCookie の作成時に HttpCookie の Expires プロパティを追加することです。
誰かが良い説明をしているなら、私はすべての耳です!:)