【问题标题】:Docker project using $_SESSION variable not created未创建使用 $_SESSION 变量的 Docker 项目
【发布时间】:2020-02-13 03:21:44
【问题描述】:

我最近刚刚接手了一个项目,我们正试图使用​​ php:7.4-fpm-buster 将其放置在 docker 中。之前使用的是旧版本的 PHP,因此在项目中大量使用了 $_SESSION 变量。这是我的 PHP 文件中失败的代码:

if (session_status() == PHP_SESSION_NONE) {
    session_start();
}

...和...

unset($_SESSION['ListOfRoutings']);

我还回显了 sys_get_temp_dir(),它说它是 /tmp,它还说它正在写入的文件夹是可写的。我得到的错误:

注意:未定义的变量:_SESSION in /usr/local/src/arc-bis/basketdesign/scripts/ListOfRoutings.php 上 第 96 行

第 96 行是未设置的调用。我还取出了 if 语句,它不会创建会话。有没有办法让 $_SESSION 使用 docker 创建一个只有 tmp 目录的变量?我试图在 docker 中创建一个 tmp 目录,但是没有用。 提前谢谢...

编辑:这是来自 phpinfo 的信息:

启用会话支持 已注册的保存处理程序文件用户已注册 序列化程序处理程序 php_serialize php php_binary 本地指令 ValueMaster 值 session.auto_startOffOff session.cache_expire180180 session.cache_limiternocachenocache session.cookie_domainno 值没有值 session.cookie_httponly没有 valueno value session.cookie_lifetime00 session.cookie_path// session.cookie_samesiteno 值无值 session.cookie_secure00 session.gc_divisor10001000 session.gc_maxlifetime72007200 session.gc_probability11 session.lazy_writeOnOn session.namePHPSESSIDPHPSESSID session.referer_checkno 值没有值 session.save_handler没有 值无值 session.save_path/tmp/tmp session.serialize_handlerphpphp session.sid_bits_per_character44 session.sid_length3232 session.upload_progress.cleanupOnOn session.upload_progress.enabledOnOn session.upload_progress.freq1%1% session。 upload_progress.min_freq11 session.upload_progress.namePHP_SESSION_UPLOAD_PROGRESSPHP_SESSION_UPLOAD_PROGRESS session.upload_progress.prefixupload_progress_upload_progress_ session.use_cookies11 session.use_only_cookies11 session.use_strict_mode00 session.use_trans_sid00

编辑:以下是我尝试添加到 docker 的一些内容。项目的 ./ 根目录下有一个 tmp 文件夹。

FROM php:7.4-fpm-buster
...
COPY ./docker/php/php.ini /usr/local/etc/php/php.ini.template
COPY ./docker/php/php-fpm.conf /usr/local/etc/php-fpm.conf.template
...
RUN mkdir /usr/local/src/arc-bis
COPY ./* /usr/local/src/arc-bis/
RUN chown -R www-data:www-data /usr/local/src/arc-bis/
...
WORKDIR /usr/local/src/arc-bis

在我的 docker 文件夹中的 php.ini 文件上:

session.save_path = /usr/local/src/arc-bis

【问题讨论】:

  • 是的,我找到了我的特殊情况所需的东西。
  • “之前使用的是旧版本的PHP,所以项目中大量使用了$_SESSION变量。” PHP的版本与会话变量的使用无关.
  • 你确定tmp/ 在 Docker 容器中是可写的吗?你是如何测试的?
  • Jay,我现在正在尝试将 tmp/ 文件夹添加到我的项目中,希望就是这样。我是一个新手,了解如何根据我使用的操作系统构建 docker 内的文件结构。
  • 我在我的根目录上创建了一个 tmp 文件夹,它现在具有以下权限:drwxr-xr-x。程序没有变化。

标签: php docker session


【解决方案1】:

我认为你应该测试 session_status() 是否返回 PHP_SESSION_DISABLED

当您从 session_start 查看变更日志时,您会发现:

7.1.0 session_start() 现在返回 FALSE 并且在启动会话失败时不再初始化 $_SESSION。

所以也许你也应该检查 session_start() 的返回值

您也可以调用 php_info() 并检查会话段落是否可能在您的 docker 映像上禁用会话。也许您需要为您的 docker 映像提供正确的配置

【讨论】:

  • session_start调用前后session_status的值都是0。我修改了phpinfo,看起来是启用的。
  • 你有使用 $_SESSION 的 docker 经验吗,我有 session_start 并且我启用了会话,而且我的项目的根目录中似乎有一个 tmp 文件,但我不认为 docker出于某种原因让它写入该文件。
  • 我知道这是我的 tmp 文件夹不可写的问题,不确定 docker 中的代码是否使其可写。现在正在查找。
猜你喜欢
  • 2013-10-18
  • 2012-03-27
  • 2021-01-01
  • 2019-08-06
  • 2011-10-29
  • 2021-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多