2015-12-03 2 views
0

Я строю новую версию веб-сайта в cakephp 3.x. Поскольку я перестраиваю поэтапно, мне нужно взаимодействие между частями нового сайта и старого сайта. Лучший способ сделать это в этот момент - использовать $ _SESSION. Моя проблема в том, что часть cakephp создает новый сеанс вместо использования активного из собственной части PHP. Он записывает его рядом с ним в той же папке.CakePhp 3.x Продолжить сеанс из приложения

это моя установка app.php в CakePHP

'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 ини вариант получает перезаписаны сессии конфиги cookie вариант, если он установлен (который будет по умолчанию в случае, если установлен параметр defaults).

По умолчанию экземпляр класса сеанса является created via Session::create(), который использует вашу конфигурацию сеанса, а затем наследует соответствующие значения по умолчанию для CakePHP, если используется optin defaults. Все доступные значения по умолчанию определяют опцию 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.name INI опции в session class' constructor, и, таким образом, ваша установка PHPSESSID теряется, и, следовательно, существующая сессия не собирается подбираться.

Т.Л., др - Используйте опцию 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

Вариант печенья сделал трюк! Благодарим вас за этот четкий ответ. – Joost

Смежные вопросы