没有为Captcha保留Yii会话数据

时间:2012-07-04 15:47:05

标签: php session yii

在Yii中启用会话需要做些什么特别的事吗?

我在使用Yii的CCaptcha软件包时遇到了麻烦。我遇到的最终问题是验证码验证每次都失败,因为在浏览量之间没有保留先前的验证码字符串。在我的本地环境中一切正常,但在生产服务器上失败。

我已将所有内容追溯到会话中。

如果我清除了我的cookie,我可以看到正在设置PHPSESSION cookie,因此PHP正在完成它的工作。

但如果我把这段代码放到页面中......

$session=new CHttpSession;
$session->open();
header("X-Session: " . $session['testval']. ' at ' . time());
$session['testval'] = time();

...我在我的(工作)开发服务器上得到了这个结果:

  • 网页浏览1:X-Session: at 1341416149
  • 网页浏览2:X-Session: 1341416149 at 1341416152
  • 网页浏览3:X-Session: 1341416152 at 1341416163

但是在生产服务器上我得到了这个:

  • 网页浏览1:X-Session: at 1341415456
  • 网页浏览2:X-Session: at 1341415518
  • 网页浏览3:X-Session: at 1341415530

很明显,会话数据没有被保留。有什么想法吗?

2 个答案:

答案 0 :(得分:4)

我讨厌回答我自己的问题,但就我而言,问题是生产服务器上的CHttpSession配置不正确。我不确定savePath指向哪里,但当我明确地将其设置为/tmp时,我可以看到会话数据在页面视图中得到保留。这就是我最终在/protected/config/main.php中使用的内容:

// application components
'components'=>array(
    'session'=>array(
        'autoStart'=>true,
        'sessionName'=>'session',
        'savePath'=>'/tmp', // this is the default, but still needs to be explicitly set
        'timeout'=>1440
    ),
    ...

答案 1 :(得分:1)

这不是因为“savePath”变量......而是因为你设置了一个没有空格的自定义sessionName。 Yii默认情况下将会话名称生成为“项目名称”+ {空格} +“会话”(p.e。“项目会话”)