php - 未使用$ _SESSION变量创建Docker项目

标签 php docker session

我最近刚刚使用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,它还说它正在写入的文件夹是可写的。我得到的错误:

Notice: Undefined variable: _SESSION in /usr/local/src/arc-bis/basketdesign/scripts/ListOfRoutings.php on line 96



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

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

Session Support enabled Registered save handlers files user Registered serializer handlers php_serialize php php_binary DirectiveLocal ValueMaster Value session.auto_startOffOff session.cache_expire180180 session.cache_limiternocachenocache session.cookie_domainno valueno value session.cookie_httponlyno valueno value session.cookie_lifetime00 session.cookie_path// session.cookie_samesiteno valueno value session.cookie_secure00 session.gc_divisor10001000 session.gc_maxlifetime72007200 session.gc_probability11 session.lazy_writeOnOn session.namePHPSESSIDPHPSESSID session.referer_checkno valueno value session.save_handlerno valueno value 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

最佳答案

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

当您从session_start查看Changelog时,您会发现:

7.1.0 session_start() now returns FALSE and no longer initializes $_SESSION when it failed to start the session.



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

您还可以调用php_info()并检查 session 段,这可能是在您的Docker镜像上禁用了 session 的原因。也许您需要为docker镜像提供正确的配置

关于php - 未使用$ _SESSION变量创建Docker项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60191327/

相关文章:

带有标题和 XML 内容的 PHP 发布

php - 来自 codeigniter 的 Mysql 存储过程调用

php - 如何删除数组元素然后重新索引数组?

docker-compose: 'runtime' 不支持的配置选项

linux - Spark-2.4.0 docker 构建失败

php - 将充满数据的 div 从一个简单的表单附加到包含所有分组并准备发布的 div 的表单

php - 看不到基于alpine linux的wordpress docker容器的启动安装页面

jsf - JSF 中的本地化,如何记住每个 session 而不是每个请求/ View 选择的区域设置

php - 表单提交后 session 丢失

java - session 中的 transient 对象