10

ブラウザを閉じた後も Cookie を保持するために必要な正確な手順は何ですか? 現時点で私は持っています:

  1. createPersistentCookieイベントに設定しtrueますLoggedIn
  2. MachineKey が指定されました。
  3. フォームのスライド有効期限が に設定されましたtrue

ブラウザが開いている限り、ユーザーはログインしたままになりますが、ブラウザが閉じられるとすぐに、ユーザーはどのくらいの時間でも、再度ログインする必要があります。私は何が欠けていますか?

編集: marapet によって指摘された記事 (以下のコメントを参照) を調べたところ、チケットに実際に IsPersistent フラグがあるかどうかに興味を持ちました。復号化されたチケットは次のよう System.Web.Security.FormsAuthentication.Decrypt(Request.Cookies[System.Web.Security.FormsAuthentication.FormsCookieName].Value) {System.Web.Security.FormsAuthenticationTicket} CookiePath: "/" Expiration: {19/08/2010 17:27:14} Expired: false IsPersistent: true IssueDate: {19/07/2010 17:27:14} Name: "alex" UserData: "" Version: 2 になります。詳細はすべて正しく、LoggedIn イベントで設定した内容と一致しています。さらに、Cookie から直接取得できる Cookie 値は、これと同じです。しかし、ブラウザーを閉じるとすぐに、Cookie は失われます。

ただし、チケットを保持する Cookie の日付が何らかの理由でリセットされていることに気付きました。まず、web.config の設定をオーバーライドできないため、LoggedIn イベントの最後に Expires プロパティは、プログラムで設定している月ではなく、発行日から 4000 分後です。次に、ページの読み込み後、FormsAuthentication.FormsCookieName で取得した Cookie の Expires プロパティは 01/01/0001 です。おそらくここが問題だと思いますか?任意の考えをいただければ幸いです。

編集#2: 問題/解決策に関連していることが判明したため、セッションを含めるようにタイトルとタグの両方を変更しています

4

2 に答える 2

10

それで、最終的に解決策を見つけました。結局のところ、認証 Cookie 自体の問題ではありませんでした (Cookie は正しく保持されていました。または、ハンドラーが Cookie を削除しなかった場合は、ユーザーがログインしていないと誤って判断したため、保持されていたはずです)。欠落しているセッション)。問題は、セッション Cookie が失われたか、正しく識別されなかったことです。したがって、修正は、ログオン中に次のようにセッション Cookie を手動で追加することでした。

HttpCookie authCookie = new HttpCookie("ASP.NET_SessionId", Session.SessionID);
authCookie.Domain = ".mydomain.com";
authCookie.Expires = DateTime.Now.AddMonths(1);
Response.Cookies.Add(authCookie);

ブラウザーが再び開くと、セッションが正しく識別され、ユーザー セッションが復元されます。

于 2010-07-21T10:59:10.123 に答える
0

ブラウザーを閉じるときに、永続的なフォーム認証 Cookie を破棄しないでください。web.config で定義されたタイムアウト値に対して有効なままです。

ただし、一部のブラウザーは、セッションの終了時にすべての Cookie を破棄するように構成できます。ブラウザーの設定を確認することをお勧めします (FireFox: ツール - オプション - プライバシー)。

于 2010-06-23T19:04:16.937 に答える