2014-02-23 74 views
1

在Yii,在查看CWebUser :: logout的源代碼時,我注意到他們使用Yii::app()->getSession()->destroy()而不是通常的PHP session_destroyYii會話和PHP會話是否交叉兼容?

做了一點研究我看到Yii有一個叫做CHttpSession的類,它有自己的方法來存儲數據。

這讓我想到了 - 它們是否交叉兼容? CHttpSession只是一個不錯的包裝?或者它是一個完全或沒有過程?

在我的自定義代碼中,我一直在使用$_SESSION來完成所有與會話相關的事情。在Yii生成的東西中,我假設它使用CHttpSession。使用兩者並混合起來會有問題嗎?

我現在正在將會話處理轉移到AWS DynamoDB(https://github.com/aws/aws-sdk-php/blob/master/docs/feature-dynamodb-session-handler.rst),並且在添加此附加圖層之前,我想確保一切都是兼容的。

回答

0

CHttpSession是一個用於php會話的漂亮OO包裝。底層的實現使用php的會話方法。下面是部分代碼爲CHttpSession::open()一個片段:

public function open() 
{ 
    if($this->getUseCustomStorage()) 
     @session_set_save_handler(array($this,'openSession'),array($this,'closeSession'),array($this,'readSession'),array($this,'writeSession'),array($this,'destroySession'),array($this,'gcSession')); 

    @session_start(); 

對於Yii的約定,一直使用CHttpSession代替$_SESSION

+0

好。你認爲它可以對我包含的鏈接有任何影響嗎?我正在更改自定義存儲,但我沒有處理執行它的代碼,AWS爲我做了這件事。它應該仍然自動正常工作? https://github.com/aws/aws-sdk-php/blob/master/docs/feature-dynamodb-session-handler.rst –

+0

我不確定它會自動工作或可能會產生什麼影響。您可能必須重寫子類中的'openSession'方法以包含github片段,並將此類用作會話封裝器。快樂的測試。 – topher

+0

您可以使用基於數據庫的會話來恢復該會話。它非常簡單。 只要把 '會話'=>數組( '類'=> 'CDbHttpSession', '的ConnectionId'=> 'DB', // '超時'=> 86400, ) 上配置/主。 PHP組件 – Sabbir

1

您可以使用基於數據庫的會話來恢復它。它非常簡單。只要把

'session' => array( 
       'class'=>'CDbHttpSession', 
       'connectionID' => 'db' 
), 

上的config/main.php組件