Cookieを使ったデータの保存

 Cookieとは、Webクライアントのコンピューターに情報を保存させておく仕組みのことです。クライアントサーバ形式のアプリケーションでは技術的にはサーバーからクライアントを操作することはできます。しかし、それによってセキュリティ上の問題が発生します。状況によってはハードディスクの中身を全部消去されかねません。そこで、クライアント側のリソースをサーバー側で操作できないようになっています。

 しかし、どうしてもクライアント側にデータを保存しないと不便な場合があります。そこで、少量のデータをハードディスク内に保存する仕組みが用意されています。それがCookieです。Cookieはデータを保存する目的以外にも、セッションを管理したり、ログイン状態を保持したりするときにも使用されます。

 CookieはHttpCookieのオブジェクトで利用できます。。HttpRequestオブジェクトのCookiesプロパティ、HttpResponseオブジェクトのCookiesプロパティで扱うことができます。

■ 主なプロパティ

プロパティ名 概要
Domain Cookieを関連付けるドメインを取得・設定する
Expires Cookieの有効期限の日時を取得・設定する
Item[文字列] Valueプロパティへのショートカットを取得する
Name Cookieの名前を取得・設定する
Value 各Cookieの値を取得・設定する
Value 1つのCookie内に格納されているキー・値のペアのコレクションを取得する
HttpCookieの主なプロパティ

 CookieはWebブラウザーのメモリに保存しておく方法と、ハードディスクに保存する方法があります。それぞれの方法を見てみましょう。

■ Webブラウザーのメモリに保存する

 まず、メモリ上にCookieを保存する方法を見てみましょう。この方法はWebブラウザーを閉じると保存しているデータは消えてしまいます。

プロジェクトの種類 ASP.NET Webアプリケーション
プロジェクト名 CookieTest

サンプルダウンロード

○ デザイン(index.aspx)

 Webフォーム(index.aspx)を追加して、次のようにコントロールを配置してください。

コントロールの配置例
コントロールの配置例

○ プログラム(index.aspx.vb)

 次のようにプログラムを記述してください。

index.aspx.vb

  1. Protected Sub btnSend_Click(sender As Object, e As EventArgs) Handles btnSend.Click
  2.  'Cookieにデータを保存
  3.  Me.Response.Cookies("Email").Value = Me.txtEmail.Text
  4.  '遷移
  5.  Me.Response.Redirect("receive.aspx")
  6. End Sub

○ デザイン(receive.aspx)

 Webフォーム(receive.aspx)を追加して、次のようにコントロールを配置してください。

コントロールの配置例
コントロールの配置例

○ プログラム(receive.aspx.vb)

 次のようにプログラムを記述してください。

receive.aspx.vb

  1. Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  2.  'Cookieの文字列を取得
  3.  Dim email As HttpCookie = Me.Request.Cookies("Email")
  4.  'クッキーの内容を表示
  5.  If Not email Is Nothing Then
  6.   Me.lblEmail.Text = email.Value
  7.  Else
  8.   Me.lblEmail.Text = "クッキーが存在しません。"
  9.  End If
  10. End Sub

○ 実行結果

実行結果
実行結果

○ 解説

 index.aspx.vbの10行目でCookieを保存しています。Cookieの保存はWebブラウザーに行うので、HttpResponseオブジェクトにCookieをセットします。今回はEmailというキーでCookieを保存しています。

 receive.aspx.vbの6行目では、Cookieを取得しています。Webサーバーから見ると、Webブラウザーが送ってきたデータの中にWebブラウザーが持っていたCookieがあるので、HttpRequestオブジェクトを参照します。今回は、Cookieを取得してemail変数に格納しています。9行目では、Cookieが存在しない場合はemail変数にはNothingがセットされるので、エラーメッセージを表示しています。10行目でHttpCookieオブジェクトのValueプロパティを参照して、保存してあったメールアドレスを取り出してlblEmailに表示しています。

■ Webクライアントのローカルディスクに保存する

 次にCookieをWebクライアントのローカルディスクに保存をする方法を見てみましょう。この方法は、Webブラウザーを閉じても、Webクライアントの電源を落としても情報は保持されます。そのためには、有効期限を設定します。

○ プロジェクト

 プロジェクトを作成して確認してみましょう。

プロジェクトの種類 ASP.NET Webアプリケーション
プロジェクト名 CookieTest2

サンプルダウンロード

○ デザイン

 Webフォームを追加して、次のようにコントロールを配置してください。

コントロールの配置例
コントロールの配置例

○ プログラム

 次のようにプログラムを記述してください。

index.aspx.vb

  1. Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  2.  'ポストバックのときは処理をしない
  3.  If Me.IsPostBack Then
  4.   Return
  5.  End If
  6.  'Cookieが存在するかどうか
  7.  If Not Me.Request.Cookies("UserInfo") Is Nothing Then
  8.   'Cookieからデータを取り出す
  9.   Dim userinfo As System.Collections.Specialized.NameValueCollection
  10.   userinfo = Me.Request.Cookies("UserInfo").Values
  11.   '取り出したCookieの情報を表示
  12.   Me.txtUserName.Text = Me.Server.HtmlEncode(userinfo("UserID"))
  13.   Me.txtName.Text = Me.Server.HtmlEncode(userinfo("UserName"))
  14.   Me.txtEmail.Text = Me.Server.HtmlEncode(userinfo("EmailAddress"))
  15.  Else
  16.   '各TextBoxをクリア
  17.   Me.txtUserName.Text = String.Empty
  18.   Me.txtName.Text = String.Empty
  19.   Me.txtEmail.Text = String.Empty
  20.  End If
  21. End Sub
  22. Protected Sub btnSend_Click(sender As Object, e As EventArgs) Handles btnSend.Click
  23.  'Cookieオブジェクトを生成
  24.  Dim cook As New HttpCookie("UserInfo")
  25.  '保存が選択されているかどうか
  26.  If Me.chkSave.Checked Then
  27.   'Cookieにデータを保存する
  28.   cook.Values("UserID") = Me.txtUserName.Text
  29.   cook.Values("UserName") = Me.txtName.Text
  30.   cook.Values("EmailAddress") = Me.txtEmail.Text
  31.   'Cookieに有効期限を設定する
  32.   cook.Expires = DateTime.Now.AddDays(1)
  33.  Else
  34.   'Cookieを削除する
  35.   cook.Expires = DateTime.Now.AddDays(-1)
  36.  End If
  37.  'CookieをWebクライアントに送る準備をする
  38.  Me.Response.Cookies.Add(cook)
  39.  '各TextBoxをクリア
  40.  Me.txtUserName.Text = String.Empty
  41.  Me.txtName.Text = String.Empty
  42.  Me.txtEmail.Text = String.Empty
  43. End Sub

○ 実行結果

実行結果
実行結果

○ 解説

 13行目では、System.Collections.Specialized.NameValueCollection型の変数userinfoを用意しています。このデータ型は、HttpCookieオブジェクトのValuesプロパティの型です。今回は、HttpCookieのValuesプロパティに複数のデータを設定してあるので、そのデータを取り出すために用意しました。Valuesプロパティの値はキー・値のペアで扱います。17~19行目で、それぞれのCookieのデータをTextBoxに表示しています。

 30行目ではHttpCookieオブジェクトを、名前を指定して生成しています。35~37行目では、CheckBoxにチェックが入っていた場合にHttpCookieオブジェクトのValuesプロパティにキーと値を指定して格納しています。40行目では、HttpCookieオブジェクトのExpiresプロパティに明日の日付をセットしています。このように保管期限を指定することでCookieはWebクライアントのローカルディスクに保存され、Webブラウザーを閉じても使用できるようになります。Cookieを削除する場合は43行目にあるように期限切れにした状態でWebブラウザーにレスポンスを送ると削除されます。

 今回のサンプルは、情報を保存するにチェックを入れて送信ボタンを押した後で、Webブラウザーを閉じて再び同じURLにアクセスしてみましょう。先回入力した内容がTextBoxに表示されます。

前へ   次へ