5

私はウェブを検索していて、多くの奇妙な答えを見つけました。それらのほとんどすべてを試しました。私の問題はこれです。私のログインページには以下が含まれます:

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 プロパティを追加することです。

誰かが良い説明をしているなら、私はすべての耳です!:)

4

2 に答える 2

6

RedirectFromLoginPageコードの問題は、フォーム認証 Cookie を作成し、作成したばかりの Cookie を上書きする を呼び出していることです。

HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket); 
cookie.Expires = ticket.Expiration; 
Response.Cookies.Add(cookie); 

FormsAuthentication.RedirectFromLoginPage(userName, persistCookie); <-- creates a new cookie

もちろん、によって作成された Cookie にRedirectFromLoginPageは、構成から取得されたデフォルトのタイムアウトがあります。

2 番目のバージョンが最適です。

于 2012-05-27T11:08:46.530 に答える
2

Cookie の有効期限とチケットの有効期限の違いを理解していないと思います - 保存されている Cookie がまだ有効であっても、チケットは期限切れと見なすことができます。FormsAuthenticationTicket コンストラクターの 4 番目のパラメーターは、チケットの有効期限を担当します。

したがって、質問に答えるには、Cookie の有効期限を手動で設定するか、認証チケットの有効期限を超えるのに十分な長さにする必要があります。

于 2012-05-27T10:10:19.163 に答える