如何在php-fpm容器中使用用户会话?

我的网站基于Docker容器中的代码与docker文件,如:

FROM php:7.1-fpm RUN apt-get update && apt-get install -y libmcrypt-dev \ mysql-client libmagickwand-dev --no-install-recommends \ && pecl install imagick \ && docker-php-ext-enable imagick \ && docker-php-ext-install mcrypt pdo_mysql opcache gd #ADD php.conf/opcache.ini /etc/php/7.1/mods-available/opcache.ini ADD build/prod/php.conf/www.conf /usr/local/etc/php-fpm.d/ ADD build/prod/php.conf/php.ini /usr/local/etc/php/ COPY . /app WORKDIR /app RUN chmod 777 -R storage/ RUN php artisan cache:clear && php artisan key:generate RUN nohup php artisan queue:work & 

我build立CI过程,只是用代码创build新的应用程序容器,并杀死旧的。 但在每个这样的“娱乐”之后,login的用户都会被注销。 我确信这是因为旧的容器包含PHP会话,我想将它们添加到卷,但我没有find它们。 我的php.ini:

 session.save_handler = files session.use_cookies = 1 session.cookie_path = / 

我使用Laravel框架,我的sessions.phpconfiguration有:

 'driver' => 'file', 'files' => storage_path('framework/sessions'), 'path' => '/', 

卷到path框架/会话没有帮助

当你运行php artisan key:generate ,它会为APP_KEY生成新的值。 你可以在.env文件中看到它的值(项目根目录)

APP_KEY用于encryption和解密会话数据(和其他东西),所以当你再次生成密钥时,laravel不能访问以前的会话数据。

如果您使用docker卷作为会话文件,但APP_KEY更改,则来自storage / framework / sessions的会话文件将变得无用

这很容易通过login到本地网站进行testing,运行命令php artisan key:generate ,刷新页面。 您将被注销。

要解决您的问题会议使用相同的APP_KEY每当您创build一个容器。

您可以将密钥作为环境variables传递给docker run -e APP_KEY='<key-here>' ... ,但是您需要启用环境variables

注意:即使你使用不同的会话驱动程序(redis,database,memcached,…),键也应该保持不变。

有关Laravel的应用程序密钥的更多信息- 它是什么以及它是如何工作的?

Laravel安装文档应用程序密钥

更多关于laravel会议