ASP.NET Cookie

24685 ワード

Cookieを使用する過程でいくつかの疑問に出会ったことがあります.MSDNを参照して、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
  • にアクセスできるかを指定できます.

    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は修正されたフォーマットでブラウザに送信されます.