在Yii中启用会话需要做些什么特别的事吗?
我在使用Yii的CCaptcha软件包时遇到了麻烦。我遇到的最终问题是验证码验证每次都失败,因为在浏览量之间没有保留先前的验证码字符串。在我的本地环境中一切正常,但在生产服务器上失败。
我已将所有内容追溯到会话中。
如果我清除了我的cookie,我可以看到正在设置PHPSESSION
cookie,因此PHP正在完成它的工作。
但如果我把这段代码放到页面中......
$session=new CHttpSession;
$session->open();
header("X-Session: " . $session['testval']. ' at ' . time());
$session['testval'] = time();
...我在我的(工作)开发服务器上得到了这个结果:
X-Session: at 1341416149
X-Session:
1341416149 at 1341416152
X-Session: 1341416152 at
1341416163
但是在生产服务器上我得到了这个:
X-Session: at 1341415456
X-Session: at 1341415518
X-Session: at 1341415530
很明显,会话数据没有被保留。有什么想法吗?
答案 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。“项目会话”)