2015-12-03 23 views
0

我在cakephp 3.x中構建了一個新版本的網站。由於我分階段重建,因此我需要在新網站的各個部分和舊網站之間進行互動。此時執行此操作的最佳方法是使用$ _SESSION。 我的問題是,cakephp部分進行新的會話,而不是使用本地PHP部分中的活動會話。它將它寫在相同的文件夾中。CakePhp 3.x從應用程序中繼續會話

這是一個在CakePHP我app.php設置

'Session' => [ 
    'defaults' => 'php', 
    'timeout' => '2000', 
'ini' => [ 
    'session.cookie_domain' => '.domain.com', 
    'session.save_path' => '/var/www/clients/web/tmp', 
    'session.name' => 'PHPSESSID' 
] 
], 

這是我的php.ini設置

Session Support enabled 
Registered save handlers files user memcache memcached 
Registered serializer handlers php php_binary wddx 

Directive Local Value Master Value 
session.auto_start Off Off 
session.cache_expire 180 180 
session.cache_limiter nocache nocache 
session.cookie_domain no value no value 
session.cookie_httponly Off Off 
session.cookie_lifetime 0 0 
session.cookie_path//
session.cookie_secure Off Off 
session.entropy_file /dev/urandom /dev/urandom 
session.entropy_length 32 32 
session.gc_divisor 1000 1000 
session.gc_maxlifetime 1440 1440 
session.gc_probability 0 0 
session.hash_bits_per_character 5 5 
session.hash_function 0 0 
session.name PHPSESSID PHPSESSID 
session.referer_check no value no value 
session.save_handler files files 
session.save_path /var/www/clients/web/tmp /var/www/clients/web/tmp 
session.serialize_handler php php 
session.upload_progress.cleanup On On 
session.upload_progress.enabled On On 
session.upload_progress.freq 1% 1% 
session.upload_progress.min_freq 1 1 
session.upload_progress.name PHP_SESSION_UPLOAD_PROGRESS PHP_SESSION_UPLOAD_PROGRESS 
session.upload_progress.prefix upload_progress_ upload_progress_ 
session.use_cookies On On 
session.use_only_cookies On On 
session.use_trans_sid 0 0 

回答

1

session.name INI選項得到由會議CONFIGS cookie選項,如果設置覆蓋(如果設置了defaults選項,它將被默認設置)。

默認會話類實例正在created via Session::create(),消耗會話配置,然後繼承的情況下正在使用的defaults選擇啓用相應的CakePHP會話缺省。所有可用的默認值都定義了cookie選項,其值爲CAKEPHP。該php默認目前看起來像

'cookie' => 'CAKEPHP', 
'ini' => [ 
    'session.use_trans_sid' => 0, 
] 

https://github.com/cakephp/cakephp/blob/3.1.5/src/Network/Session.php#L131-L136

cookie選項,如果存在的話,將覆蓋session class' constructorsession.name INI選項,這樣你PHPSESSID設置丟失,因此現有會話不會被拾起。

TL;博士 - 使用cookie選項,或者不繼承默認

所以,你既可以使用cookie選項,而不是session.name

'Session' => [ 
    'defaults' => 'php', 
    'cookie' => 'PHPSESSID', 
    'timeout' => '2000', 
    'ini' => [ 
     'session.cookie_domain' => '.domain.com', 
     'session.save_path' => '/var/www/clients/web/tmp' 
    ] 
], 

或不繼承默認值,並定義一切都需要你自己

'Session' => [ 
    'timeout' => '2000', 
    'ini' => [ 
     'session.cookie_domain' => '.domain.com', 
     'session.save_path' => '/var/www/clients/web/tmp', 
     'session.name' => 'PHPSESSID', 
     'session.use_trans_sid' => 0 
    ] 
], 
+0

該cookie選項的竅門!謝謝你的明確迴應。 – Joost