我正在 magento 和 Symfony2 之间进行一些“有趣”的分享会。它在我的电脑上运行良好(mac osx 10.6 + PHP 5.3.3),机制如下:
- 用户登录到 magento(在 foo.example.com 上)
- 用户访问另一个网站 (bar.example.com) 并登录。
- session 作为文件存储在 magento var/session 目录下。
session cookie 设置为在所有 .example.com 子域上共享。 正如我之前所说,它在我的机器上运行完美。
我今天使用 PHP 5.3.5-dotdeb 在 Ubuntu 8.0.4 服务器上部署了这两个应用程序,并为我的生产域 (.example.org) 配置了 session 共享机制。 session cookie 也在两个子域之间共享。
现在,乐趣开始了:
- 我在 foo.example.org 上登录我的 magento 应用程序并获得一个值为“abc”的 session cookie
- 在 magento var/session 目录中创建了一个名为 sess_abc 的文件。
- 文件所有者是 www-data:www-data,文件权限是 -rw--------
如果我刷新 magento 页面,我仍然处于登录状态。
我转到 bar.example.org 上的其他应用程序
- PHP 接受 session cookie abc 但不检索其中的数据。
- 如果我执行 var_dump($_SESSION),我将得到一个空数组
- 最后,文件sess_abc被覆盖,权限不变。
- 如果我刷新此页面,我的 var_dump 将提供一些 symfony 写入 session 的信息。
你们有没有想过为什么 PHP 不从这个 session 文件中检索数据? 我已经尝试过 chmod go+rw session 文件,但结果是一样的......
提前致谢!
编辑:
Suhosin 已启用。 phpinfo() 在 bar.example.org 上给出了这个
suhosin.session.checkraddr 0 0 suhosin.session.cryptdocroot On On suhosin.session.cryptkey [ protected ] [ protected ] suhosin.session.cryptraddr 0 0 suhosin.session.cryptua Off Off suhosin.session.encrypt On On suhosin.session.max_id_length 128 128 session.auto_start Off Off session.bug_compat_42 Off Off session.bug_compat_warn Off Off session.cache_expire 180 180 session.cache_limiter no value nocache session.cookie_domain .example.org no value session.cookie_httponly Off Off session.cookie_lifetime 3600 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.name frontend PHPSESSID session.referer_check no value no value session.save_handler files files session.save_path /www/var/session no value session.serialize_handler php php session.use_cookies On On session.use_only_cookies On On session.use_trans_sid 0 0
最佳答案
我不知道你知道,但是 magento 将 session 存储在“私有(private)”文件夹 path/to/magento/var/session
中......可能在 MacOS 上你可以覆盖你的 php.ini 文件。 ini(trought magento)以覆盖您的 session 路径;但是在 ubuntu 上你不能(/可能不会)覆盖你的 php.ini ...
你检查过了吗?
关于未读取 PHP session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5493210/