0

我正在cakephp 3.x 中构建一个新版本的网站。由于我分阶段重建,我需要在新站点和旧站点的部分之间进行交互。目前最好的方法是使用$_SESSION。我的问题是 cakephp 部分创建了一个新会话,而不是使用本地 PHP 部分中的活动会话。它写在它旁边的同一个文件夹中。

这是我在 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
4

1 回答 1

1

如果设置了 ini 选项,则 session configs选项将覆盖它(如果设置了该选项,则默认情况下session.name会覆盖该选项)。cookiedefaults

默认情况下,会话类实例是通过创建Session::create()的,使用您的会话配置,然后在defaults使用 optin 的情况下继承相应的 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.name中的 ini 选项,因此您的设置会丢失,因此现有会话将不会被拾取。PHPSESSID

tl;dr - 使用该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
    ]
],
于 2015-12-03T14:25:31.433 回答