ASP.NET Cookie
24685 ワード
Cookieを使用する過程でいくつかの疑問に出会ったことがあります.MSDNを参照して、Cookieに関する知識点を記録します.
Cookieは、Webサーバとブラウザの間で要求とページが伝達され、ユーザーのハードディスク(HDD)上のフォルダに格納される小さなテキスト情報です.Cookieには、ユーザーがサイトにアクセスするたびにWebアプリケーションが読み取ることができる情報が含まれています.その後、ユーザーが特定のサイトのページを要求すると、ユーザーが特定のURLを入力すると、ブラウザはローカルハードディスク(HDD)でそのURLに関連付けられたCookieを検索します.Cookieが存在する場合、ブラウザはページリクエストとともにサイトにCookieを送信します.Cookieは、特定のページに関連するのではなく、Webサイトに関連しています.したがって,ブラウザとサーバは,ユーザがサイト内のどのページを要求してもCookie情報を交換する.ユーザーが異なるサイトにアクセスすると、各サイトはユーザーブラウザにCookieを送信し、ブラウザはすべてのCookieを格納します.
ほとんどのブラウザでは最大4096バイトのCookieがサポートされています.これはCookieのサイズを制限しています.Cookieで少量のデータを保存することが望ましいです.ブラウザはまた、サイトがユーザコンピュータに格納できるCookieの数を制限する.ほとんどのブラウザでは、サイトごとにCookieを20個しか保存できません.より多くのCookieを格納しようとすると、最も古いCookieは破棄されます.一部のブラウザでは、すべてのサイトから受け入れられるCookieの合計数に対して、通常300個の絶対制限も行います.
ブラウザはユーザーシステム上のCookieを管理し、CookieはHttpResponseオブジェクトを通じてブラウザに送信する.
Cookieには1つの値を格納してもよいし、1つのCookieには複数の名前/値ペアを格納してもよい.名前/値がサブキーに対称
デフォルトでは、1つのサイトのすべてのCookieがクライアントに一緒に格納され、すべてのCookieがそのサイトに送信された要求とともにサーバに送信されます.Cookieの範囲は2つの方法で設定できます. Cookieの範囲をサーバ上のフォルダに制限します.これにより、Cookieをサイト上のアプリケーション に制限できます.範囲をドメインに設定します.これにより、ドメイン内のどのサブドメインがCookie にアクセスできるかを指定できます.
Cookieをサーバー上のフォルダに制限するには、CookieのPathプロパティを設定する必要があります.
サイト名がwww.School.comの場合、前に作成したCookieは、パスhttp://www.School.com/Studentsのページとフォルダの下のすべてのページにのみ使用できます.
デフォルトでは、Cookieは特定のドメインに関連付けられています.サイトにサブドメインがある場合は、特定のサブドメインにCookieを関連付けることができます.この操作を行うには、CookieのDomainプロパティを設定します.
サブキーの読み込み:
Cookieのサブキーは、NameValue Collectionタイプのセットにタイプ化されます.
Cookieを直接変更することはできません.Cookieを変更するプロセス設計では、新しい値を持つ新しいCookieを作成し、ブラウザに送信してクライアントの古いバージョンのCookieを上書きします.次のコード例では、ユーザーのサイトへのアクセス数を格納するCookieの値を変更する方法を示します.
Cookieの削除(すなわち、ユーザのハードディスクからCookieを物理的に除去する)は、Cookieを修正する形式である.Cookieはユーザのコンピュータにあるため、直接削除することはできません.ただし、Cookieはブラウザで削除できます.このテクノロジーは、削除するCookieと同じ名前の新しいCookieを作成し、現在の日付より前の日付に設定します.ブラウザがCookieの有効期限をチェックすると、ブラウザはこの有効期限切れのCookieを破棄します.
単一のサブキーを削除するには、サブキーを保存するCookieのValueコレクションを操作します.まずCookiesオブジェクトからCookieを取得することでCookieを再作成します.次に、ValuesコレクションのRemoveメソッドを呼び出し、削除するサブキーの名前をRemoveメソッドに渡すことができます.次に、CookieをCookiesコレクションに追加すると、Cookieは修正されたフォーマットでブラウザに送信されます.
Cookieとは
Cookieは、Webサーバとブラウザの間で要求とページが伝達され、ユーザーのハードディスク(HDD)上のフォルダに格納される小さなテキスト情報です.Cookieには、ユーザーがサイトにアクセスするたびにWebアプリケーションが読み取ることができる情報が含まれています.その後、ユーザーが特定のサイトのページを要求すると、ユーザーが特定のURLを入力すると、ブラウザはローカルハードディスク(HDD)でそのURLに関連付けられたCookieを検索します.Cookieが存在する場合、ブラウザはページリクエストとともにサイトにCookieを送信します.Cookieは、特定のページに関連するのではなく、Webサイトに関連しています.したがって,ブラウザとサーバは,ユーザがサイト内のどのページを要求してもCookie情報を交換する.ユーザーが異なるサイトにアクセスすると、各サイトはユーザーブラウザにCookieを送信し、ブラウザはすべてのCookieを格納します.
Cookie制限
ほとんどのブラウザでは最大4096バイトのCookieがサポートされています.これはCookieのサイズを制限しています.Cookieで少量のデータを保存することが望ましいです.ブラウザはまた、サイトがユーザコンピュータに格納できるCookieの数を制限する.ほとんどのブラウザでは、サイトごとにCookieを20個しか保存できません.より多くのCookieを格納しようとすると、最も古いCookieは破棄されます.一部のブラウザでは、すべてのサイトから受け入れられるCookieの合計数に対して、通常300個の絶対制限も行います.
Cookieクラス定義
// Summary:
// Provides a type-safe way to create and manipulate individual HTTP cookies.
public sealed class HttpCookie
{
// Summary:
// Creates and names a new cookie.
//
// Parameters:
// name:
// The name of the new cookie.
public HttpCookie(string name);
//
// Summary:
// Creates, names, and assigns a value to a new cookie.
//
// Parameters:
// name:
// The name of the new cookie.
//
// value:
// The value of the new cookie.
public HttpCookie(string name, string value);
// Summary:
// Gets or sets the domain to associate the cookie with.
//
// Returns:
// The name of the domain to associate the cookie with. The default value is
// the current domain.
public string Domain { get; set; }
//
// Summary:
// Gets or sets the expiration date and time for the cookie.
//
// Returns:
// The time of day (on the client) at which the cookie expires.
public DateTime Expires { get; set; }
//
// Summary:
// Gets a value indicating whether a cookie has subkeys.
//
// Returns:
// true if the cookie has subkeys, otherwise, false. The default value is false.
public bool HasKeys { get; }
//
// Summary:
// Gets or sets a value that specifies whether a cookie is accessible by client-side
// script.
//
// Returns:
// true if the cookie has the HttpOnly attribute and cannot be accessed through
// a client-side script; otherwise, false. The default is false.
public bool HttpOnly { get; set; }
//
// Summary:
// Gets or sets the name of a cookie.
//
// Returns:
// The default value is a null reference (Nothing in Visual Basic) unless the
// constructor specifies otherwise.
public string Name { get; set; }
//
// Summary:
// Gets or sets the virtual path to transmit with the current cookie.
//
// Returns:
// The virtual path to transmit with the cookie. The default is the path of
// the current request.
public string Path { get; set; }
//
// Summary:
// Gets or sets a value indicating whether to transmit the cookie using Secure
// Sockets Layer (SSL)--that is, over HTTPS only.
//
// Returns:
// true to transmit the cookie over an SSL connection (HTTPS); otherwise, false.
// The default value is false.
public bool Secure { get; set; }
//
// Summary:
// Gets or sets an individual cookie value.
//
// Returns:
// The value of the cookie. The default value is a null reference (Nothing in
// Visual Basic).
public string Value { get; set; }
//
// Summary:
// Gets a collection of key/value pairs that are contained within a single cookie
// object.
//
// Returns:
// A collection of cookie values.
public NameValueCollection Values { get; }
// Summary:
// Gets a shortcut to the System.Web.HttpCookie.Values property. This property
// is provided for compatibility with previous versions of Active Server Pages
// (ASP).
//
// Parameters:
// key:
// The key (index) of the cookie value.
//
// Returns:
// The cookie value.
public string this[string key] { get; set; }
}
Cookieプログラミング
ブラウザはユーザーシステム上のCookieを管理し、CookieはHttpResponseオブジェクトを通じてブラウザに送信する.
Response.Cookies["TestOne"].Value = " Cookie ";
HttpCookie cookie = new HttpCookie("TestTwo", " Cookie ");
Response.Cookies.Add(cookie);
多値Cookie
Cookieには1つの値を格納してもよいし、1つのCookieには複数の名前/値ペアを格納してもよい.名前/値がサブキーに対称
Response.Cookies["Student"]["FirstName"] = " "; Response.Cookies["Student"]["LastName"] = " "; Response.Cookies["Student"].Expires =DateTime.Now.AddDays(10);
Cookieの範囲を制御する
デフォルトでは、1つのサイトのすべてのCookieがクライアントに一緒に格納され、すべてのCookieがそのサイトに送信された要求とともにサーバに送信されます.Cookieの範囲は2つの方法で設定できます.
Cookieをフォルダまたはアプリケーションに制限する
Cookieをサーバー上のフォルダに制限するには、CookieのPathプロパティを設定する必要があります.
Response.Cookies["Student"]["FirstName"] = " ";
Response.Cookies["Student"]["LastName"] = " ";
Response.Cookies["Student"].Expires = DateTime.Now.AddDays(10);
Response.Cookies["Student"].Path = "/Students";
サイト名がwww.School.comの場合、前に作成したCookieは、パスhttp://www.School.com/Studentsのページとフォルダの下のすべてのページにのみ使用できます.
Cookieのドメイン範囲の制限
デフォルトでは、Cookieは特定のドメインに関連付けられています.サイトにサブドメインがある場合は、特定のサブドメインにCookieを関連付けることができます.この操作を行うには、CookieのDomainプロパティを設定します.
Response.Cookies["Student"]["FirstName"] = " ";
Response.Cookies["Student"]["LastName"] = " ";
Response.Cookies["Student"].Expires = DateTime.Now.AddDays(10);
Response.Cookies["Student"].Domain = "support.contoso.com";
Cookieの読み込み
if (Request.Cookies["Student"] != null)
{
HttpCookie cookie = Request.Cookies["Student"];
string name = Server.HtmlEncode(cookie.Value);
}
サブキーの読み込み:
if (Request.Cookies["Student"] != null)
{
string firstName = Server.HtmlEncode(Request.Cookies["Student"]["FirstName"]);
string lastName = Server.HtmlEncode(Request.Cookies["Student"]["LastName"]);
}
Cookieのサブキーは、NameValue Collectionタイプのセットにタイプ化されます.
if (Request.Cookies["Student"] != null)
{
NameValueCollection collection = Request.Cookies["Student"].Values;
}
Cookieの変更と削除
Cookieを直接変更することはできません.Cookieを変更するプロセス設計では、新しい値を持つ新しいCookieを作成し、ブラウザに送信してクライアントの古いバージョンのCookieを上書きします.次のコード例では、ユーザーのサイトへのアクセス数を格納するCookieの値を変更する方法を示します.
int counter;
if (Request.Cookies["counter"] == null)
counter = 0;
else
{
counter = int.Parse(Request.Cookies["counter"].Value);
}
counter++;
Response.Cookies["counter"].Value = counter.ToString();
Response.Cookies["counter"].Expires = DateTime.Now.AddDays(1);
Cookieの削除
Cookieの削除(すなわち、ユーザのハードディスクからCookieを物理的に除去する)は、Cookieを修正する形式である.Cookieはユーザのコンピュータにあるため、直接削除することはできません.ただし、Cookieはブラウザで削除できます.このテクノロジーは、削除するCookieと同じ名前の新しいCookieを作成し、現在の日付より前の日付に設定します.ブラウザがCookieの有効期限をチェックすると、ブラウザはこの有効期限切れのCookieを破棄します.
Response.Cookies["Student"]["FirstName"] = " ";
Response.Cookies["Student"]["LastName"] = " ";
Response.Cookies["Student"].Expires = DateTime.Now.AddDays(-10);
サブクッキーの削除
単一のサブキーを削除するには、サブキーを保存するCookieのValueコレクションを操作します.まずCookiesオブジェクトからCookieを取得することでCookieを再作成します.次に、ValuesコレクションのRemoveメソッドを呼び出し、削除するサブキーの名前をRemoveメソッドに渡すことができます.次に、CookieをCookiesコレクションに追加すると、Cookieは修正されたフォーマットでブラウザに送信されます.