ASP.NETでのCookieの使い方

10842 ワード

Cookieは、Webアプリケーションがユーザー関連情報を保存するために有用な方法を提供します.例えば、ユーザがサイトにアクセスする場合、Cookieを使用してユーザプリファレンスまたはその他の情報を保存することができ、これにより、ユーザが次にサイトにアクセスすると、アプリケーションは以前に保存した情報を取得することができる.
技術的に言えば、Cookieはクライアントに保存されているデータです(XPがインストールされている場合は、Documents and Settings\Cookiesフォルダを参照してください).ユーザがウェブサイトにアクセスすると,ウェブサイトはユーザに期限切れのCookieを与え,ブラウザはCookieを受け取ってクライアントのフォルダの下に格納する.以降,ユーザがウェブページにアクセスするたびに,ブラウザはウェブサイトのURLに基づいてローカルCookieフォルダ内に現在のウェブサイト関連のCookieが存在するか否かを検索し,もしあればページリクエストとともにサーバに送信する.
一、Cookieに関する知識は以下の点を理解する必要があります.
・Cookieは単なる文字列であり、実行できない.・ほとんどのブラウザではCookieの大きさは4 K以下、サイトごとに保存できるCookieは20個以下、すべてのサイトに保存されているCookieの合計は300個以下と規定されている.・Cookie以外にクライアントの機器にデータを書き込む方法はほとんどない(Cookieの書き込み操作もブラウザで行う).もちろん、Cookieもブラウザのセキュリティ構成で禁止できます.IEブラウザを使用する場合は、「ツール」→「インターネット」→「プライバシー」のページをご覧ください.現在のほとんどのサイトでは、Cookieを使用してIDなどのデータを保存しており、次のサイトへのアクセス時に以前の構成を直接「継続」できるようにしていますので、簡単にCookieを閉じないことをお勧めします.
Cookieを使用する場合は、固有のセキュリティの弱点を意識しなければなりません.Cookieは結局クライアントに保存されています.したがって、ユーザー名、パスワード、クレジットカード番号などの秘密情報をCookieに保存しないでください.Cookieには,ユーザが把握すべきでないコンテンツを保存したり,他のCookieを盗む可能性のある人に制御されているコンテンツを保存したりしない.
二、Cookieの使用
次に、Cookieを保存、読み取り、削除、および変更する方法について説明します.まずページに4つのボタンを追加して、この4つの操作を完了します.
 
  

保存Cookie的方法如下。

 
  
protected void btn_SaveCookie_Click(object sender, EventArgs e)
{
    HttpCookie SingleValueCookie = new HttpCookie("test1", " Cookie");
    SingleValueCookie.Expires = DateTime.Now.AddDays(1);
    Response.Cookies.Add(SingleValueCookie);
    HttpCookie MultiValueCookie = new HttpCookie("test2");
    MultiValueCookie.Values.Add("key1", "value1");
    MultiValueCookie.Values.Add("key2", "value2");
    MultiValueCookie.Expires = DateTime.Now.AddDays(1);
    Response.Cookies.Add(MultiValueCookie);
}

1つのCookieで単一の値を保存しても複数の値を保存してもよいことがわかります.HttpCookieタイプはCookieを表し、ExpiresプロパティはCookieの有効期限を変更するために使用されます.単一値Cookieでは、構築方法で直接値を指定したり、Value属性で値を指定したりすることができます.多値Cookieでは、ValuesプロパティのAddメソッドを使用してサブキーと値を追加するか、Valuesプロパティのインデックスを使用してサブキーと値を直接設定できます.上のコードは下のコードに等しい.
 
  
protected void btn_SaveCookie_Click(object sender, EventArgs e)
{
    HttpCookie SingleValueCookie = new HttpCookie("test1");
    SingleValueCookie.Value = " Cookie";
    SingleValueCookie.Expires = DateTime.Now.AddDays(1);
    Response.Cookies.Add(SingleValueCookie);
    HttpCookie MultiValueCookie = new HttpCookie("test2");
    MultiValueCookie.Values["key1"] = "value1";
    MultiValueCookie.Values["key2"] = "value2";
    MultiValueCookie.Expires = DateTime.Now.AddDays(1);
    Response.Cookies.Add(MultiValueCookie);
}

値を追加した後、Responseオブジェクトを使用してCookieをブラウザに戻すことを忘れないでください.我々のサーバはクライアントマシンに直接Cookieを書くのではなく、ブラウザがこの作業を完了します.もちろん、ユーザーはブラウザがCookieを読み書きできるかどうかを設定することもできます.
次はCookieを読み込む操作です.
 
  
protected void btn_ReadCookie_Click(object sender, EventArgs e)
{
    HttpCookie SingleValueCookie = Request.Cookies["test1"];
    if (SingleValueCookie != null)
    {
        Response.Write(string.Format("Key:{0} Value:{1} Expires:{2}
", "test1", SingleValueCookie.Value, SingleValueCookie.Expires));
    }
 
    HttpCookie MultiValueCookie = Request.Cookies["test2"];
    if (MultiValueCookie!= null)
    {
        Response.Write(string.Format("Key:{0} Value:{1}
", "test2", MultiValueCookie.Value));
        foreach (string subkey in MultiValueCookie.Values.AllKeys)
        {
            Response.Write(string.Format("SubKey:{0} Value:{1} Expires:{2}
", subkey, MultiValueCookie.Values[subkey], MultiValueCookie.Expires));
        }
    }
}

多値Cookieの場合、AllKeys属性が返す文字列配列を巡回してすべてのサブキーKeyを取得し、サブキーの値を取得します.Cookieにアクセスする前に、Cookieが存在するかどうかを検出する必要があることに注意してください.ページを開き、「Cookieの保存」ボタンをクリックし、「Cookieの読み取り」ボタンをクリックすると、次の出力が得られます.
Key:test 1 Value:単一Cookie Expires:001-1 0:00:00 Key:test 2 Value:key 1=value 1&key 2=value 2 SubKey:key 1 Value:value 1 Expires:001-1 0:00:00 SubKey:key 2 Value:value 2 Expires:001-1 0:00:00
ここでは以下の点を説明します.
・すべてのCookieの有効期限が正常に表示されないことを発見しました.これは、ブラウザがサーバに返すCookieには期限が含まれておらず、サーバがブラウザに返すCookieには期限が含まれているためです.期限切れはクライアントブラウザにのみ意味があり、サーバには意味がありません.
・多値CookieのValueを直接読み取ると、すべてのサブキーとサブキーの値がkey=valueメソッドで表示され、複数のサブキーが「&」で接続されている(URLのような方法).
次はCookieを削除する操作です.
 
  
protected void btn_DelCookie_Click(object sender, EventArgs e)
{
    HttpCookie SingleValueCookie = Request.Cookies["test1"];
    SingleValueCookie.Expires = DateTime.MinValue;
    Response.Cookies.Add(SingleValueCookie);
}

すべてのCookieを削除したい場合は、削除を繰り返します.
 
  
protected void btn_DelCookie_Click(object sender, EventArgs e)
{
    foreach (string key in Request.Cookies.AllKeys)
    {
        HttpCookie cookie = Request.Cookies[key];
        cookie.Expires = DateTime.MinValue;
        Response.Cookies.Add(cookie);
    }
}

サーバはCookieを直接削除することはできません.Cookieを削除する操作はブラウザで行われていることを常に覚えておいてください.削除といっても、実はその期限を過去の時間に設定してCookieを期限切れにします.したがって、削除操作には3つのステップがあります.
1.RequestオブジェクトからCookieを取得します.2.Cookieの有効期限を過去の時間に設定します.3.クッキーをResponseに書き直す.4.クッキーを修正する作業も簡単です.
 
  
protected void btn_ModifyCookie_Click(object sender, EventArgs e)
{
    HttpCookie SingleValueCookie = Request.Cookies["test1"];
    SingleValueCookie.Value = " Cookie";
    Response.Cookies.Add(SingleValueCookie);
}

三、Cookie使用拡張
(1)Cookieの作成
 
  
// 1:
Response.Cookies["username"].value="mike";
Response.Cookies["username"].Expires=DateTime.MaxValue;
 
// 2:
HttpCookie acookie = new HttpCookie("last");
acookie.Value="a";
acookie..Expires=DateTime.MaxValue;
Response.Cookies.Add(acookie);

//多値クッキーの書き方
 
  
// 1:
Response.Cookies["userinfo1"]["name"].value="mike";
Response.Cookies["userinfo1"]["last"].value="a";
Response.Cookies["userinfo1"].Expires=DateTime.MaxValue;
 
// 2:
HttpCookie cookie = new HttpCookie("userinfo1");
cookie.Values["name"]="mike";
cookie.Values["last"]="a";
cookie.Expires=DateTime.MaxValue;
//cookie.Expires = System.DateTime.Now.AddDays(1);// 1
Response.Cookies.Add(cookie);

(2)Cookie Internet Explorerを読み込むサイトのCookieをファイル名形式@に保存する.txtのファイルには、アカウント名が含まれています.注意:Cookieの値を取得する前に、Cookieが確実に存在することを確認してください.それ以外の場合、例外が発生します.
 
  
If (Request.Cookies["userName"]!=null)
{
    string str = Request.Cookies("userName").Value;
}
 
// Cookie
If ( Request.Cookies["userInfo1"]!=null )
{
    string name=Request.Cookies["userInfo1"]["name"];
    string last=Request.Cookies["userInfo1"]["last"];
}
 
// Cookie
for(int i = 0 ;i {
    HttpCookie cookies = Request.Cookies;
    Response.Write("name="+cookies.Mame+"
");
    if (cookies.HasKeys )//
    {
        System.Collections.Specialized.NameValueCollection NameColl
                                             = aCookie.Values ;
        for(int j=0;j         {
            Response.Write(" ="+ NameColl.AllKey[j] +"
");
            Response.Write(" ="+ NameColl[j] +"
");
        }
    }
    else
    {
        Response.Write("value="+cookies.Value+"
");      
    }
}

このコードを実行すると、「ASP.NET_SessionId」というCookie,ASPが表示されます.NETはこのCookieでセッションの一意の識別子を保存します.
(3)Cookieを削除してその有効期間を過去の日付に設定する.ブラウザがCookieの有効期間をチェックすると、この期限切れのCookieが削除されます.
 
  
HttpCookie cookie = new HttpCookie("userinfo1");
cookie.Expires=DateTime.Now.AddDays(-30);
Response.Cookies.Add(cookie);

(4)クッキーの修正
 
  
Response.Cookies["Info"]["user"] = "2";
Response.Cookies["Info"].Expires = DateTime.Now.AddDays(1);        cookie
HttpCookie acookie=Request.Cookies["Info"];
acookie.Values.Remove("userid");
acookie.Expires = DateTime.Now.AddDays(1);
Response.Cookies.Add(acookie);        cookie,
int limit=Request.Cookies.Count - 1;
for(int i=0;i {
    acookie = Request.Cookies(i)
    acookie.Expires = DateTime.Now.AddDays(-1)
    Response.Cookies.Add(acookie)
}

-------------
プライマリ・ステーションおよびセカンダリ・ドメイン名・ステーションがあり、クッキーが共有される場合は、次の設定を追加します.
 
  
cookie.Domain = ". ";
cookie.Path = "/";

四、Cookieまとめ
Cookieは単純で実用的な対象であるが,Cookieの動作原理,大きさ制限,安全性などにも注意し,概ね以下の点にまとめることができる.
・格納されている物理的位置.クライアントのCookiesフォルダ内.・格納タイプ制限.文字列.・状態使用の範囲.現在のリクエストコンテキストのコンテキストはCookieにアクセスでき、Cookieはユーザーごとに独立しています.・格納のサイズ制限.各Cookieは4 Kデータを超えない.各サイトは20個のCookieを超えない.すべてのサイトのCookieの合計は300を超えない.・ライフサイクル.それぞれのCookieには自分の期限があり、期限が切れた後に期限が切れます.・安全と性能.クライアントに格納され、セキュリティが悪い.機密データについては、暗号化して保存することを推奨します.・長所短所・注意事項.Webサイトとユーザーを簡単に関連付けることができ、ユーザー設定を長く保存できます.