PHP session 无法与 memcached 一起使用

标签 php apache memcached

我正在尝试设置 memcached 以允许在 2 个负载平衡的 Apache 服务器上共享 session - 在我的 php.ini 中我有:

节点1

session.save_handler = memcached
session.save_path = "tcp://NODE1_IP:11211"

节点2

session.save_handler = memcached
session.save_path = "tcp://NODE2_IP:11211"

在/etc/sysconfig/memcached 中,我有:

PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 127.0.0.1"

在 phpinfo 中我有:

session.save_handler    memcached   memcached
session.save_path   tcp://NODE1_IP:11211    tcp://NODE1_IP:11211

当我登录到我的应用程序时,我在登录页面和检查用户是否登录的页面上有 session_start ,但是当我:

print_r($_SESSION);

没有显示任何内容,因为 session 看起来没有被设置。

值得注意的是,在 phpinfo 中,我在 session 部分的顶部看到这些行:

Session Support enabled
Registered save handlers    files user
Registered serializer handlers  php_serialize php php_binary wddx

注册的保存处理程序列出了文件和用户,但没有列出有关 memcached 的内容 - 这可能是这不起作用的原因吗?我该如何更改/添加它?

node1_ip 应该是公共(public) IP 还是私有(private) IP 还是无关紧要?

我可以 telnet 到 localhost 11211,但不能到 NODE1_IP 11211 - 连接被拒绝。端口 11211 已打开 - 尝试将/etc/sysconfig/memcached 更改为“-l NODE1_IP:11211”,但仍然连接被拒绝

如果我将/etc/sysconfig/memcached 中的选项更改为空,即 OPTIONS ""那么我可以远程登录到 NODE1_IP 11211,那么我放入 memcached 配置的格式似乎是错误的?

还有什么需要我做的吗?我尝试过更改保存路径、添加和删除 tcp、使用 127.0.0.1、使用实际 IP 地址、使用所有用逗号分隔的 IP 地址,但仍然无法使其工作。

最佳答案

如果你有:

session.save_handler = memcached

这意味着您正在使用 memcacheD 扩展,而不是 memcache 扩展。

在这种情况下,配置应该编写 tcp:// 协议(protocol):

session.save_path NODE1_IP:11211

session.save_path=tcp://NODE1_IP:11211 用于 memcache 扩展,末尾不带“d”。

关于PHP session 无法与 memcached 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42694782/

相关文章:

php - 在 Laravel 上创建数据库的 Vim 命令

php - 自动使用 HTTPS

javascript - 如何使用 javascript 动态删除在 html 中创建的输入表单

apache - 无法为 Apache 反向代理后面的 Bonita soft 指定 URL

php - (PHP) 选择 memcache::connect 还是 memcache::pconnect?

php - 用于创建缩略图的部分工作功能

java - 在 Apache Netbeans9 中创建新 Maven 项目时出现异常

apache - 代理是否必须先完全加载所有内容才能将它们发回?

ruby - 我如何测试 Rack::Cache 是否在带有内存缓存的 Heroku 上与 Sinatra 应用程序一起运行?

nosql - 使用 Memcache API 兼容存储在删除/驱逐后保留缓存数据