CakePhp 3.x从应用程序外部继续会话 [英] CakePhp 3.x Continue session from out of the app
问题描述
我正在Cakecake 3.x中构建一个网站的新版本。由于我分阶段进行重建,因此需要新站点和旧站点之间进行交互。目前最好的方法是使用 $ _ SESSION 。
我的问题是,cakephp部分创建了一个新会话,而不是使用本机PHP部分中的活动会话。
I'm building a new version of a website in cakephp 3.x. Since I rebuild in phases,I need interaction between parts of the new site and the old site. The best way to do this at this moment is with the use of $_SESSION. My problem is that the cakephp part makes a new session instead of using the active one from the native PHP part. It writes it next to it in the same folder.
这是我在cakephp中的app.php设置
this is my app.php setting in 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设置
These are my php.ini settings
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
选项(如果已设置(在设置 defaults
选项的情况下,默认情况下将是默认选项)。
The session.name
ini option gets overwritten by the session configs cookie
option if it is set (which it will be by default in case the defaults
option is is set).
默认情况下,会话类实例为 通过 Session :: create()
创建,占用了会话配置,然后在使用 defaults
optin的情况下继承相应的CakePHP会话默认值。所有可用的默认值都定义了 cookie
选项,该选项的值为 CAKEPHP
。当前 php
的默认值类似于
By default the session class instance is being created via Session::create()
, consuming your session configuration, and then inheriting the corresponding CakePHP session defaults in case the defaults
optin is being used. All of the available defaults do define the cookie
option, which has a value of CAKEPHP
. The php
defaults currently looks like
'cookie' => 'CAKEPHP',
'ini' => [
'session.use_trans_sid' => 0,
]
https://github.com/cakephp/cakephp/blob/3.1.5/src/Network/Session .php#L131-L136
https://github.com/cakephp/cakephp/blob/3.1.5/src/Network/Session.php#L131-L136
cookie
选项(如果存在)将覆盖<$ PHPSESSID
设置丢失,因此,
The cookie
option, when present, will overwrite the session.name
ini option in the session class' constructor, and thus your PHPSESSID
setting gets lost, and consequently the existing session is not going to be picked up.
因此,您可以使用 cookie
选项代替 session.name
So, you could either use the cookie
option instead of session.name
'Session' => [
'defaults' => 'php',
'cookie' => 'PHPSESSID',
'timeout' => '2000',
'ini' => [
'session.cookie_domain' => '.domain.com',
'session.save_path' => '/var/www/clients/web/tmp'
]
],
或不继承默认值,而是自己定义所有必要的
or do not inherit the defaults, and define everything necessary on your own
'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从应用程序外部继续会话的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!