Cross-SubDomain Cookie for Laravel

許多時候一個團隊會 hosting 許多平台,且往往各平台間都是有所關聯,像是 flyingv 還有 VShop, VEvent。其會員資料庫都是共用,且同樣的登入方式。若在平台間瀏覽操作需要一直重新登入,是否也太令人不悅了~
因此可以設定這些平台的 cookie (通常登入判斷的資訊都會存於此)為同樣的 Domain,不同的 Sub Domain。例如 domain name 為 example.com,其他平台是 shop.example.com, event.example.com, ...

此處在 Laravel 的設定主要相關三個檔案 app/config/app.php, app/config/cache.php, app/config/session.php,環境為下:

  • Nginx
  • php5-fpm
  • Laravel 4.1
  • PHP 5.5

關鍵1: app/config/app.php###

各平台 project 的此檔案 "Encryption Key" 記得相同,可從其中一個 project 複製到其他專案

'key' => 'a random 32 character string',

關鍵2: app/config/session.php###

Session Driver 此處假設都為 memcached,Cookie Name 都為 ex_session,Cookie Domain 都為 .example.com

'driver' => 'memcached',
'cookie' => 'ex_session',
'domain' => '.example.com',

若 Session Drive 為 Native,記得設定 files 為同樣的位置

'files' => '/srv/shared/sessions',

關鍵3: app/config/cache.php###

因 session driver 指定為 memcached,故此處須設定 Cache Drive 與 memcached server 的位址

'driver' => 'memcached',
'memcached' => array(

		array('host' => '127.0.0.1', 'port' => 11211, 'weight' => 100),

	),

以上完成後便可做到 Cross-Domain 登入 Cookie 的判斷,若無法可以試試看重新啟動 php5-fpm,將 cgi 中 cache 住的 php script 更新。