Analog Studio

【PHP】サブドメイン間でセッションを共有する方法

概要

皆さんは各種 pay、使っていますか?私は全く使っていません(笑)
いちいちスマホから決済用コードを表示させて店員さんにスキャンしてもらうって全然スマートじゃないですよ。
各種 pay は、スマホの NFC や Suica を利用した決済をベースにすればスマートだったと思います。システム的にも開発的にも、です。

利便性の向上を目的に登録していないメールアドレスにパスワードのリセット情報を送信する 7pay は論外ですが、ちょっとしたことでユーザの利便性を上げる仕組みはあると嬉しいですよね。
そこで今回は、サブドメイン間でセッション情報を共有する方法を紹介します。

とても簡単なことなので、しっていると役に立つときがあると思います。

なぜ、サブドメイン間でセッションを共有する必要があるのか?

まずはじめに、サブドメイン間でセッションを共有するという状況を考えてみましょう。

一般的な Web サイトの構成ではドメインは決まった一つだけを利用しますね。
カテゴリごとにサブドメインに分割するなんてことは、ドメインの評価が各サブドメインに分散して SEO 的にも不利なので、普通はやりません。

しかし、場合によってはブランディングとして独立したサブドメインで特定のカテゴリを分けたい場合もあります。
本業と関連はあるけど、パッと見て独立していると思うような派生業務専用のページを作るような場合です。

例えば、本業はカフェだけど夜はバーもやっている、となればカフェとバーでサイトを分けたいと考えたりします。
こういった時にサブドメインが非常に役に立ち、独自ドメインを追加することなくサイトとしてそれぞれを独立させることができます。

しかし、ログイン機能をもった予約システムなどを実装して共用できたら便利だなと考えるわけです。
でもサブドメインとはいえ、異なるサイトですので通常はセッションを "共用されず" このような機能は独立したものとなってしまいます。

そこでセッションのサブドメイン間の共有が必要となります。

PHPでセッションを共有する方法はini_set()関数一発!

やり方は簡単なのでサクッと紹介しますね。

<PHP> ini_set('session.cookie_domain', '.独自ドメイン'); // 独自ドメインの前に"."を追加した値を設定 session_start(); // ini_setよりも後ろ、HTML出力より前でsession_startする

拍子抜けするくらい簡単です。
セッションを開始する前に "session.cookie_domain" を設定するだけでサブドメイン間でセッションを共有することができます。

当サイトもサブドメインを使っていますが、サブドメイン間で共有する場合には、ini_set('session.cookie_domain', '.analogstd.com'); をセッション開始前に追記するだけで独自ドメインと各サブドメイン間でセッションが共有されます。

※レンタルサーバのサブドメインなどを借りて運用している場合は絶対に設定しないで下さい。レンタルサーバの同じドメインを使っている他人がセッションを参照できてしまいます。

まとめ

以上、サブドメイン間でセッションを共有する方法でした。

7pay を反面教師に、セキュリティには気を使って便利なサイト設計をしていきましょう。