CakePhp 3.x 从应用程序外继续会话
CakePhp 3.x Continue session from out of the app
我正在用 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
session.name
ini 选项被会话配置 cookie
选项覆盖(如果设置了 cookie
选项(如果设置了 defaults
选项,它将是默认设置)。
默认情况下,会话 class 实例正在 created via 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 class' constructor 中的 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
]
],
我正在用 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
session.name
ini 选项被会话配置 cookie
选项覆盖(如果设置了 cookie
选项(如果设置了 defaults
选项,它将是默认设置)。
默认情况下,会话 class 实例正在 created via 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 class' constructor 中的 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
]
],