聚會時間公告: 因應COSCUP 2011, Kalug 8月份休會一次

二月 24, 2014

小惡魔AppleBOY
AppleBOY
is about »

tag cloud

» Laravel 搭配 Memcached Cross Domain Session

Laravel PHP Framework

Laravel 提供了 filecookiedatabasememcachedarray 五種方式來存取 Session,預設的使用方式會是 file 存取,如果要跨 Domain 存取 Session 基本上只要設定 php.ini 裡面的 Session 相關參數即可,請注意底下 3 個參數。

完成後,只要是相同主網域內的 sub domain session 都可以互相存取,然而在 Laravel 內該如何設定,請先打開 app/config/session.php 檔案,Laravel 預設使用 Native File Session Driver,看看原本設定

'files' => storage_path().'/sessions',
'cookie' => 'laravel_session',
'domain' => null,

這三個參數都必須修改成底下

'files' => 'your session folder path',
'cookie' => 'PHPSESSID',
'domain' => '.domain.com',

PHP 預設 Session cookie name 是 PHPSESSID,另外 Laravel Session 存放位置請跟 php.ini 內設定位置一樣。到這邊設定倒是沒有什麼問題,如果改成使用 Memcached 來存放 Session,會發生無法存取同一個 Session。請先將 php.ini 改成底下設定

php_value[session.save_handler] = memcached
php_value[session.save_path] = "192.168.1.102:11211"
php_value[session.cookie_domain] = ".example.com"

另外 Laravel Session 設定請改成

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

要設定 Memcached Server 請修改 app/config/cache.php

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

但是這樣是不會通的,因為如果改成 Laravel Memcached Session Driver,那麼寫入跟讀出的 Session handle 將會被 Laravel Driver 取代,所以永遠拿不到一樣的 Session,此解法就是將 Session Driver 調回 Native Driver,並且修改 HttpFoundation/Session/Storage/Handler/NativeFileSessionHandler.php 檔案,此檔案放在 vendor/symfony/http-foundation/Symfony/Component/ 將底下兩行程式碼註解掉即可。

ini_set('session.save_path', $savePath);
ini_set('session.save_handler', 'files');

這不是很正規的解法,不過提供給有需要搭配 Memcached 的開發者一個方向。

十二月 31, 2013

小惡魔AppleBOY
AppleBOY
is about »

tag cloud

» 增加 phpMyAdmin 登入時間

phpMyAdmin

phpMyAdmin 是一套管理 MySQL 資料庫的 UI 介面工具,預設登入時間為 1440 秒,這時間是定義在 libraries/config.default.php 內,phpMyAdmin 也是透過 gc-maxlifetime 來決定 Session 存在與否,所以如果要增加登入時間,比如說設定一年 (3600 * 24 * 365) 好了,請按照底下設定

PHP 設定檔

如果是裝 php-fpm 請修改 /etc/php5/fpm/php.ini 路徑

; After this number of seconds, stored data will be seen as 'garbage' and
; cleaned up by the garbage collection process.
; http://php.net/session.gc-maxlifetime
session.gc_maxlifetime = 315360000

重新啟動 php-fpm

$ /etc/init.d/php5-fpm restart

phpMyAdmin 設定檔

修改 config.inc.php 如果找不到此檔案,請複製 config.sample.inc.phpconfig.inc.php,接著增加底下設定即可

$cfg['LoginCookieValidity'] = 3600 * 24 * 365;

最後注意的是 gc_maxlifetime 設定值一定要超過 LoginCookieValidity 值,這樣才有作用

support:

biggo.com.tw

A Django site.