CakePhp 3.x从应用程序外部继续会话 [英] CakePhp 3.x Continue session from out of the app

查看:107
本文介绍了CakePhp 3.x从应用程序外部继续会话的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在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 选项(如果存在)将覆盖<$ session.name ini选项-L204 rel = nofollow noreferrer> 会话类的构造函数 ,因此您的 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆