有効パス・ドメイン・SSLの設定
そふぃのPHP入門 >> PHP実践リファレンス >> クッキー処理 >> 有効パス・ドメイン・SSLの設定

有効パス・ドメイン・SSLの設定

setcookie()関数その他の引数

これまでのページでsetcookie()関数の第1~第3引数までは解説してきましたが、今回は残りの引数を一気に解説していきます。

まずはおさらいでsetcookie()の情報と書式です。

参考関数

書式

  • bool setcookie( string name [, string value [, int expire [, string path [, string domain [, bool secure ]]]]] )

第1引数のクッキー名、第2引数のクッキー値に関してはクッキー送受信で、第3引数の有効日時については有効期限付きクッキーで解説してますので詳しくはそちらでご確認ください。

有効パスの指定

さて、setcookie()関数、第4引数のパスですが、これはクッキーを有効としたいパスを指定します。デフォルト値はクッキーがセットされた時のカレントディレクトリ、つまり現在のディレクトリ(フォルダ)になるので、この値を省略した場合には現在のディレクトリ配下で有効になります。

ドメイン配下とディレクトリ配下

クッキーの有効範囲内をドメイン配下の全てのディレクトリで有効にする為には './' と指定します。

  1. //ドメイン配下全てで有効
  2. setcookie("name", "value", 0, "./");

このようにする事で自ドメイン配下の全てのディレクトリに有効なクッキーが作成できます。

特定のディレクトリ以下のみ有効のクッキーを設定するには '/ディレクトリ名' と指定します。

  1. // dirnameディレクトリ内で有効
  2. setcookie("name", "value", 0, "/dirname");

このように指定した場合には、dirname 配下の全てのディレクトリでクッキーが有効になります。例えばdirname/subdir などのようにサブディレクトリがあった場合でも subdir内、つまりサブディレクトリ内でもクッキーが有効になります。

ドメイン配下指定時の注意

クッキーの有効パスに './' と指定してドメイン配下全てで有効にする方法はとても便利なのですが、注意点が1つあります。共有サーバなどを使用している場合に良くあるのですが、ご自分のドメインがhttp://www.example.com/~yourID/ などのようにサーバから与えられるドメインが既にサブディレクトリになっている場合です。

こういったURLの場合、 './' と指定するとクッキーの有効パスは http://www.example.com/ 内の全てで有効になります。http://www.example.com/~yourID/内で有効になるわけではないので、同じサーバを使用している他のユーザのサイト上でもクッキーが有効になってしまうという事です。

そのような場合には './' と指定するのではなく、 '/~yourID' と指定するようにしましょう。

有効ドメインの指定

setcookie()関数の第5引数、ドメインはクッキーの有効範囲をドメインごとに指定できる引数です。第4引数のパスの設定でドメイン配下全てに有効なクッキーを作成する事はできますが、この第5引数でドメイン指定をした場合には各ドメインごとに有効なクッキーを指定する事ができます。

例えば、exapmle.com 内の全てのサブドメインで有効にするには'.example.com' を指定します。

  1. // 全てのサブドメインで有効
  2. setcookie("name", "value", 0, "", ".example.com");

と記述します。'.example.com' の先頭についてるドット . はつけてもつけなくても構いませんが多くのブラウザに互換性があるとPHPマニュアルに記載されているのでつけておいたほうが無難でしょう。

特定のサブドメイン内でのみ有効にしたい場合は、'www.example.com' などのように指定します。

  1. // 特定のサブドメインで有効
  2. setcookie("name", "value", 0, "", "www.example.com");

このように指定した場合、クッキーはwwwサブドメイン内においてのみ有効となります。共有サーバでも仮想ドメインを割り当ててもらってる人にはこの指定方法が便利そうですね。

SSLの指定

最後の第6引数はHTTPS通信の時にのみ有効にするかどうかの指定です。デフォルトでは 0 となっていて、HTTP通信・HTTPS通信のどちらでもクッキーが有効です。

この値に 1 を指定することによってHTTPS通信時のみ有効なクッキーを作成できます。

  1. // HTTPS通信の場合のみ有効
  2. setcookie("name", "value", 0, "", "", 1);

補足ですが、HTTPSというのは通常のHTTPにSSLというデータ暗号化機能を追加したプロトコルです。つまり、HTTPS通信というのはSSLを使用して情報を暗号化したうえで行うHTTP通信なのですが、ショッピングカートや個人情報の取り扱い時によく使用されています。

SSLを使用した通信だとURLが http://example.com/ がhttps://example.com/ に変わり、IEだとブラウザの右下の方に鍵のマークが出てきたりするのですぐ分かります。また、HTTPS通信に切り替わる時に、ブラウザの設定によっては「これからセキュリティを重視した通信をするけどいい?」というような意味合いのダイアログを表示してくれたりします。

セキュリティを意識する必要がなければあまり個人のサイトで使用することはないでしょうが、ネットショップなどには必須の通信システムですね。