2012-07-04 53 views
3

在Yii中启用会话有什么特别之处吗?Yii会话数据不保留给CCaptcha

我在使用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

所以很明显的会话数据没有被保留。有任何想法吗?

回答

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 
    ), 
    ... 
+0

只是想感谢您发布此信息。它为我节省了很多工作。 :-) –

1

这不是因为“savePath”变量...那是因为你设置的自定义SESSIONNAME没有空格。 Yii默认生成会话名称为“项目名称”+ {空间} +“会话”(p.e.“项目会话”)