【问题标题】:PHP Session + Memcached => Mysterious Data FormatPHP Session + Memcached => 神秘的数据格式
【发布时间】:2012-08-24 13:25:44
【问题描述】:

我使用 memcached 作为 session.save_handler 已经有一段时间了,一切都 100% 正常。

那我试试:

echo $mycache->get('memc.sess.key.o8el2bgk4k9s1mr723j1blrgs3');

获取其中一个会话,输出很奇怪(108个字符的字符串):

MaiiA6iX7qlS0IZjTdr2I3w4axNTp7H2IYcH-SAficGw5ZKIcMQ0BE2kFnsm4xHMk3KAJo9kOwmRTSBOPdPAC-m5L9CkWnYPONqujt5m0c8.

这个字符串是什么格式的?供您参考,这是 phpinfo() 中的 memcached 配置:

  • 指令本地值主值
  • memcached.compression_factor 1.3 1.3
  • memcached.compression_threshold 2000 2000
  • memcached.compression_type fastlz fastlz
  • memcached.serializer php php
  • memcached.sess_binary 0 0
  • memcached.sess_lock_wait 150000 150000
  • memcached.sess_locking 1 1
  • memcached.sess_prefix memc.sess.key。 memc.sess.key。

所以它应该是这种格式:

user_name|s:5:"guest";user_id|s:1:"3";user_level|s:2:"-1";

而不是奇怪的字符串。

注意:我使用的是 memcached + php-memcached。不是 memcache,也不是 php-memcache。谢谢。

【问题讨论】:

  • 也许你的内存缓存实例默认没有压缩,但会话处理程序仍然使用它。你可以试试$mycache->get('your_session_key', MEMCACHE_COMPRESSED)吗?
  • @MathieuImbert 是memcached,不是memcache,所以命令不一样。我试过 $mycache->setOption(Memcached::OPT_COMPRESSION, true); (和假),结果是一样的。
  • 哦,对不起,我没有意识到它是 memcached。压缩标志是我唯一的猜测。它可以是 memcached 会话处理程序中的一些内置压缩/编码。

标签: php memcached


【解决方案1】:

我找到了罪魁祸首! suhosin.session.encrypt.

附言我直接从 memcached 获取数据,因为我正在测试 WebSocket,并且必须手动使用 JS 传递会话 ID。然后我需要自己获取该 ID 的会话变量:D

【讨论】:

  • 谢谢 - 一旦我们发现问题,这是一个真正的节省时间。动态捕获内存缓存流量:tshark -i eth1 -n -R memcache -Tfields -e tcp.srcport -e tcp.dstport -e memcache.command -e memcache.key -e memcache.value -e memcache.response 'port 11211'
【解决方案2】:

PHP 会话使用自己的函数进行编码/解码 - 请参阅 session_decode。

【讨论】:

  • 问题:应该是 user_name|s:5:"guest";user_id|s:1:"3";user_level|s:2:"-1";而不是那个奇怪的字符串。
猜你喜欢
  • 2014-02-14
  • 1970-01-01
  • 2012-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多