今からスタート! PHP

第6回 クッキーの取り扱い

この記事を読むのに必要な時間:およそ 2 分

クッキーに有効期限を設ける

前述のログインのように,クッキーに有効期限を設けるときは,値の次にそれを記述します。現在時刻からの時間で期限を設けるときはtime()を,特定の時刻を期限としたいときはmktime()を用いると良いでしょう。

リスト2 有効期限の設定

// 現在時刻から30分後まで有効(秒数単位で計算)
setcookie( 名前, 値, time() + 60 * 30 );

// 2008/01/16 18:00:00まで有効
setcookie( 名前, 値, mktime( 18, 0, 0, 1, 16, 2008 ) );

クッキーを受信する

クッキーが保存されているユーザからアクセスがあると,WebブラウザはクッキーをPHPプログラムに送信してきます。受信されたクッキーの内容を調べるには,$_COOKIEを用います。これは配列という形式の変数です。

特定の名前のクッキーの値を知るには,$_COOKIE[名前]と記述します。値を調べる前に,クッキーを受信しているかを調べるときは,isset( $_COOKIE[名前] )と記述します。どちらの場合でも,有効期限を過ぎてしまったクッキーは受信されません。

リスト3 クッキーの中身を調べる

// 特定のクッキーの値を知る
$_COOKIE['CookieByPHP'];

// 特定のクッキーが受信しているかを調べる
isset( $_COOKIE['CookieByPHP'] );

// どんな名前のクッキーが受信できたかを調べる
foreach( $_COOKIE as $name => $value )  {
  // ..... $nameと$valueを用いた処理 .....
  // ..... $nameには名前,$valueには対応する値が代入済み .....
}

セキュリティへの配慮

クッキーとして送信する値は,セキュリティに配慮して決めるべきです。なぜなら,前回述べた「クロスサイトスクリプティング」は,クッキーの情報を盗み取ることが目的であることも少なくないからです。また,図1のようにクッキーの値を確認する方法が用意されていることもありますので,ユーザIDなどの情報をそのまま送信すべきではありません。

では,どうすればよいかということになりますが,基本的な対策としては,以下が挙げられるでしょう。もちろん,このほかにもさまざまな対策が必要です。

クッキー自体の対策
  • ユーザIDなどとは関連しない,新しく作成したデータを用いる
  • 有効期限を短くする
  • クッキーが有効なドメインやパスを細かく設定する
Webサイト側の対策
  • クッキーの悪用がないかを監視する
  • セキュリティに関する情報を常に収集し,それに基づいて新たな対策を施す
ユーザへの啓蒙
  • プライバシーポリシーを明らかにする
  • セキュリティに関する注意を喚起する

    など...

クッキーは,前述の通りWebサイトにとって便利なものである一方で,利用に当たってはセキュリティ対策が求められます。この両面を知った上でPHPプログラムを開発するようにしてください。

著者プロフィール

沖林正紀(おきばやしまさのり)

SE/プログラマを経て,WebアプリケーションやXMLなどについて雑誌記事や書籍の執筆活動を始める。大手メーカで製品資料の作成や,セミナーの講師を担当したこともある。現在は,取材記事や製品レビューなどに執筆活動の幅を広げる一方,プログラミング教材の開発も手がけている。

著書