redis中的PHP会话不工作


PHP sessions in redis not working

这是我的php.ini会话设置

session.save_handler = redis
session.save_path    = tcp://127.0.0.1:63791

这是我的会话信息()

Session Support     enabled
Registered save handlers    files user redis rediscluster redis rediscluster
Registered serializer handlers  php_serialize php php_binary wddx igbinary
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    no value    no value
session.entropy_length  0   0
session.gc_divisor  1000    1000
session.gc_maxlifetime  1440    1440
session.gc_probability  1   1
session.hash_bits_per_character 5   5
session.hash_function   0   0
session.lazy_write  On  On
session.name    PHPSESSID   PHPSESSID
session.referer_check   no value    no value
session.save_handler    redis   redis
session.save_path   tcp://127.0.0.1:63791   tcp://127.0.0.1:63791
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_strict_mode Off Off
session.use_trans_sid   0   0

这是我在加载带有session_start 的页面时遇到的错误

致命错误:未捕获RedisException:连接在[无活动]中关闭file]:0堆栈跟踪:#0{main}在第0行的[无活动文件]中抛出

我做错了什么?堆栈是Apache 2.4.18、Php7.01、Redis 2.2.5

你读过吗:https://www.digitalocean.com/community/tutorials/how-to-set-up-a-redis-server-as-a-session-handler-for-php-on-ubuntu-14-04

确保php应用程序不会覆盖会话。save_path ex:

ini_set("session.save_path","/tmp/");

如果您的设置在PHP应用程序中被覆盖,那么连接将失败。

在一个单独的php文件中测试您的配置:

<?php
var_dump(ini_get("session.save_handler"));
var_dump(ini_get("session.save_path"));

从控制台或web浏览器运行它。为了验证设置是否正确,最好尽可能晚地在应用程序中执行这段代码。

大多数时候,框架中的ini设置(Zend、Symfony等)在该框架的引导阶段过载。

当var_dump的输出与单独的PHP文件不同时,您可能需要调整框架设置。阅读您正在使用的框架的文档。

你问的问题可能有很多原因和影响。取决于基础设施、Redis设置、防火墙、PHP应用程序/框架。你应该意识到这一点。