2012-07-04 54 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.「項目會話」)