3

要在 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

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

4

2 回答 2

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
    ),
    ...
于 2012-07-04T17:29:40.440 回答
1

这不是因为“savePath”变量......而是因为您设置了一个没有空格的自定义 sessionName。Yii 默认生成会话名称为 "name-of-project" + {space} + "session" (pe "project session")

于 2013-03-21T09:24:22.083 回答