7

FormsAuthenticationTicketを使用して非永続的なCookieを作成するのに問題があります。ユーザーデータをチケットに保存したいので、FormsAuthentication.SetAuthCookie()またはFormsAuthentication.GetAuthCookie()メソッドを使用できません。このため、FormsAuthenticationTicketを作成し、HttpCookieに保存する必要があります。

私のコードは次のようになります。

DateTime expiration = DateTime.Now.AddDays(7);

// Create ticket
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(2,
    user.Email,
    DateTime.Now,
    expiration,
    isPersistent,
    userData,
    FormsAuthentication.FormsCookiePath);

// Create cookie
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticket));
cookie.Path = FormsAuthentication.FormsCookiePath;
if (isPersistent)
    cookie.Expires = expiration;

// Add cookie to response
HttpContext.Current.Response.Cookies.Add(cookie);

変数isPersistentがtrueの場合、すべてが正常に機能し、Cookieが永続化されます。しかし、isPersistentがfalseの場合、Cookieはとにかく永続化されているようです。ブラウザウィンドウにサインオンして閉じ、ブラウザを再度開いてもログインしたままです。Cookieを非永続的に設定するにはどうすればよいですか。

非永続的なCookieはセッションCookieと同じですか?Cookie情報はサーバーのsessiondataに保存されていますか、それともサーバーへのすべての要求/応答でCookieが転送されますか?

4

1 に答える 1

3

削除してみてください:

if (isPersistent) { cookie.Expires = expiration; }

...そしてそれを次のように置き換えます:

if (!isPersistent) { cookie.Expires = DateTime.Now.AddYears(-1); }

于 2011-02-23T16:31:53.487 に答える