web-dev-qa-db-ja.com

永続的なCookieと非永続的なCookieを作成するにはどうすればよいですか?

永続的なCookieと非永続的なCookieを作成する方法がわからないようです。たとえば、返されるHTTPヘッダーの違いは何ですか?

53
Chung Wu

Cookieには、有効期間が暗黙的または明示的に設定されており、その期間が制御されます(実際に強制するユーザーエージェントの影響を受けます)。 Cookieは、セッションの期間(またはさらに短い期間)のみ持続する場合があります。

Cookieが有効な場合、HTTPリクエストとともに、元のドメインに渡されます。 Cookieを設定するドメインのみがCookieを読み取ることができます(ただし、クロスサイトスクリプティングなど、これを悪用する方法はあります)。

  • Cookieを特定の時間に期限切れにする場合は、選択したクライアントまたはサーバー側の言語を使用して有効期限を設定します。

  • セッションの終了時にCookieを期限切れにする場合は、有効期限を設定しないでください。

RFC(emphasis mine)から:

Cookieセッターは削除日を指定できます。その場合、Cookieはその日に削除されます。

Cookieセッターで日付が指定されていない場合、ユーザーがブラウザを終了するとCookieは削除されます。

その結果、日付を指定することは、Cookieをセッション間で存続させる方法です。 このため、有効期限のあるCookieは永続と呼ばれます。

サンプルアプリケーションとして、ショッピングサイトは永続的なCookieを使用して、ユーザーがバスケットに入れたアイテムを保存できます。 (実際には、Cookieはコンピューターではなく、ショッピングサイトに保存されているデータベースのエントリを参照する場合があります。)このように、ユーザーが購入せずにブラウザーを終了して後で戻った場合でも、同じアイテムがこれらのアイテムを再度探す必要がないように、バスケット。これらのCookieに有効期限が与えられていない場合、ブラウザーが閉じられると有効期限が切れ、バスケットコンテンツに関する情報は失われます。

71
Tim Medora

ASP.NETには2種類のCookieがあります

永続的なCookie:

クッキーはコンピューターのハードディスクに保存されます。それらはハードディスク上に残り、削除されるか期限が切れるまでWebサーバーからアクセスできます。

public void SetPersistentCookies(string name, string value)
{
    HttpCookie cookie = new HttpCookie(name);

    cookie.Value = value;

    cookie.Expires = Convert.ToDateTime(“12/12/2008″);

    Response.Cookies.Add(cookie);
}

非永続クッキー:

Cookieは、Webブラウザーの実行中にのみ保存されます。ブラウザを閉じるまで、Webサーバーでのみ使用できます。ディスクには保存されません。

public void SetNonPersistentCookies(string name, string value)
{
    HttpCookie cookie = new HttpCookie(name);

    cookie.Value = value;

    Response.Cookies.Add(cookie);
}
10
Deepak.Aggrawal

セッションクッキー

HttpCookie cookie = new HttpCookie("myCookieName", "myCookieValue");
Response.Cookies.Add(cookie);

特定のタイムスタンプ付きのCookie( 。NET DateTimeライブラリ

HttpCookie cookie = new HttpCookie("myCookieName", "myCookieValue");
cookie.Expires = DateTime.Today.AddMonths(12); //or AddMinutes, or AddHours...
Response.Cookies.Add(cookie);

永続的なクッキー

HttpCookie cookie = new HttpCookie("myCookieName", "myCookieValue");
cookie.Expires = DateTime.MaxValue;
Response.Cookies.Add(cookie);
6
expertCode