为什么Symfony Session数据在我的生产服务器上加密?

时间:2011-01-18 14:10:47

标签: session authentication symfony1 doctrine

我想与共享相同顶级域名的Symfony网站共享一个身份验证方法。 我使用对所有子域有效的cookie和sfPDOSessionStorage来保存会话数据。

在两个项目中,

factories.yml都是这样设置的:

all:
  storage:
    class: sfPDOSessionStorage
    param:
      database: doctrine
      db_table: sessions
      session_name: myauth
      db_id_col: id
      db_data_col: sess_data
      db_time_col: time
      session_cookie_domain: ".mydomain.net"
      session_cookie_lifetime: 86400
      session_cookie_path: /

在我的开发机器和我的同事的机器上,这种机制工作正常,但在服务器上却没有(当我切换子域时,我被要求提供凭据)。我在两种环境之间看到的唯一区别是存储数据的格式,数据似乎在prod服务器上加密,但在我的机器上以明文形式显示。这里没有敏感数据,所以我可以发布一个例子:

开发环境sess_data:

symfony/user/sfUser/lastRequest|i:1295349567;symfony/user/sfUser/authenticated|b:0;symfony/user/sfUser/credentials|a:0:{}symfony/user/sfUser/attributes|a:1:{s:30:"symfony/user/sfUser/attributes";a:1:{s:7:"referer";s:0:"";}}symfony/user/sfUser/culture|s:2:"fr";

生产服务器sess_data:

BB7HBTsQg75NNGvb9Z8sexldqbS79YzDgrztQzSFhsUpEk2EeCOtKw8FQbm31vLIRyr3ZP_klwZFXywnkdem27naIWjIVBP_WwpwNRg4IMj1J0fIfxJN_UOw2RbCWh91L5ryCD_7_ynN2UtxfuJwUWnxoGuUvqD8YQxNdczQipmktPVFk1mVfKE1-BsrdHHLIXH_gi44-Bos3f-EshE5skuQpachnY1FkgvvvOuXEj7zxPflgA3xtGoqJxkDijT-uKnQCH4TrimhvkIRGCt0oVuOdsAJzuWW6ijgPCD3X767mSIzm_lQmJoSGxDB7fAgFihB7Ljoq0tsysC62BqTYFB6dTnuZoj3KON8lXlyNJZVyLgTWZ3EYoObtc8jCKYNDonSjEqzTvwg4NJRVoB5ePx61iTqbDd9qFlkryzj9J8.

我还没有弄清楚哪种加密类型用于在数据库中存储信息,我也不确定这是我问题的根源,但这是我能发现的唯一区别,我看不到任何其他解释。 (PHP和MySQL版本完全相同,我的Ubuntu 10.10和Debian Squeeze服务器端)。

1 个答案:

答案 0 :(得分:3)

我认为生产服务器上安装了一些负责加密会话数据的模块。

例如,suhosin补丁为PHP添加了这样一个功能:http://www.hardened-php.net/suhosin/configuration.html

它由 php.ini 中的 suhosin.session.encrypt 配置选项激活。