書籍転載
独習ASP.NET 第3版

ASP.NETの状態管理:ビューステート/クッキー/セッション情報
― 第7章 状態管理 7.1/7.2/7.3 ―

WINGSプロジェクト 山田 祥寛
2011/07/20
Page1 Page2 Page3

7.2 クッキー

 クッキー(Cookie)とは、クライアント側に保存可能な小さなテキストのことです。通常、Webの世界ではサーバーがクライアント上のファイルを読み込むことを許可していません(インターネットにアクセスしただけで手元のファイルが書き換えられたら大変なことです)。しかし、クッキーだけは唯一の例外で、サーバーがクライアントに対して、任意のテキストを保存しておくことができます。また、自分が保存したテキストは好きなときに参照できますから、ページ間で情報を保持したいという場合には、このクッキーを利用すれば良いというわけです(図7.5)。

図7.5 クッキーとは?

7.2.1 [例2]クッキーの基本的な読み書き

 さっそく具体的な例を見てみましょう。以下は、1度目のアクセスで入力したメールアドレスをクッキーに保存し、2度目のアクセスでデフォルト表示するサンプルです(図7.6)。

図7.6 クッキーを保存

1.フォームをデザインする

 新規にCookie.aspxを作成したら、図7.7のようにレイアウトします。また、表7.3の要領でプロパティを設定してください。

図7.7 Cookie.aspxのフォームレイアウト

コントロール プロパティ
TextBox(txtMail) Columns 30
  MaxLength 100
Button(btnSave) Text 登録
表7.3 Cookie.aspxのプロパティ情報

2.イベントハンドラーを追加する

 ページロード時、ボタンクリック時に呼び出されるイベントハンドラーを追加します(リスト7.2)。

リスト7.2 Cookie.aspx.vb

 まずは、クッキーに値を保存する方法から見ていくことにしましょう()。クッキー情報を表すのは、HttpCookieクラスです。

HttpCookie(name As String, value As String)
構文 HttpCookieクラス(コンストラクター)
name:クッキー名
value:値

 HttpCookieオブジェクトには、以下のようなプロパティを設定できます。

Expiresプロパティ
  実質的には必須のプロパティです。有効期限が設定されなかった場合、クッキーはブラウザーを閉じたタイミングで削除されます。ここでは、DateTime.AddMonthsメソッドを使って3か月後の日付を指定していますが、もちろんAddDays、AddHoursなどのメソッドを使って、日/時間の単位で有効期限を設定してもかまいません。
  有効期限を過去日に設定した場合、クッキーはその場で削除されます。

Domain/Pathプロパティ
  クッキーの有効範囲(ドメイン、パス)を指定します。たとえば、Domainプロパティに「wings.msn.to」と指定した場合、「www.wings.msn.to」「www2.wings.msn.to」など、「wings.msn.to」のすべてのサブドメインでクッキーを有効にします。Pathプロパティについても同じです。「/SelfAspNet」とした場合は、「/SelfAspNet」とそのサブフォルダーに対してクッキーが有効になります。

Secureプロパティ
  SecureプロパティにTrueを設定した場合、暗号化通信(SSL:Secure Socket Layer)の環境でのみクッキーを送信します。通信を暗号化している場合には、原則としてSecureプロパティをTrueにしておくのが望ましいでしょう。これによって、暗号化されていないページが混在している場合に、クッキーが誤って送信されるのを防げます。

HttpOnlyプロパティ
  HTTPクッキーを有効にするための設定です。HTTPクッキーとは、クライアントサイドスクリプトからはアクセスできないクッキーのことを言います(HTTP経由でのみアクセスできる)。HTTPクッキーであることを宣言することで、クロスサイトスクリプティング脆弱性によるクッキー漏洩の危険性を軽減できます。
  ただし、HTTPクッキーに対応しているのはInternet Explorer 6 SP1以降、Firefox 2.0.0.5以降、Google Chrome 1.0以降、Safari 4以降、Opera 9.5以降です。それよりも古いブラウザーに対してHTTPクッキーを送信すると、ページが正しく処理できない場合もあるので注意が必要です。

 生成されたクッキー(HttpCookieオブジェクト)は、最終的にResponse.AppendCookieメソッドを呼び出すことで、クライアントに送信できます。

 一方、記録したクッキーを取得するには、Request.Cookiesプロパティにアクセスします()。Request.Cookiesプロパティは戻り値として(クッキー値そのものではなく)HttpCookieオブジェクトを返します。値にアクセスするには、Valueプロパティにアクセスする必要がありますので、注意してください。

7.2.2 クッキーのデフォルト設定を宣言する

 前の例でも見たように、クッキーの挙動は個々のコードからでも指定できますが、たとえば有効ドメインやHTTPクッキーの有効/無効などのポリシーは、基本的にアプリケーション全体で決定されることの多いものです。そこでASP.NETでは、<httpCookies>要素を利用することで、アプリケーション構成ファイルでクッキーのデフォルト設定を宣言することができるようになっています(リスト7.3)。

<system.web>
  ……中略……
  <httpCookies httpOnlyCookies="true" requireSSL="false" />
  ……中略……
</system.web>
リスト7.3 Web.config

 <httpCookies>要素で利用できる属性は、表7.4のとおりです。

属性 概要 デフォルト値
domain 有効なドメイン
httpOnlyCookies HTTPクッキーを有効にするか false
requireSSL クッキー送信にSSL通信を必須とするか false
表7.4 <httpCookies>要素の主な属性

 ただし、domain/requireSSL属性の設定は、たとえば<authentication>要素など、他の構成要素によって上書きされる可能性もあります。

【練習問題】7.1
  1. クッキーについて簡単に説明してみましょう。
  2. AddCookieメソッドを使って、名前"name"、値"value"、有効期限1か月後のクッキーを発行してみましょう。


 INDEX
  [書籍転載]独習ASP.NET 第3版
  ASP.NETの状態管理:ビューステート/クッキー/セッション情報
    1.ビューステート
  2.クッキー
    3.セッション情報

インデックス・ページヘ  「独習ASP.NET 第3版」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間