在Yii中,在查看CWebUser :: logout的源代码时,我注意到他们使用Yii::app()->getSession()->destroy()
而不是通常的PHP session_destroy
。
做了一些研究我看到Yii有一个名为CHttpSession
的类,它有自己的方法来存储数据。
这让我想到了 - 它们是否交叉兼容? CHttpSession
只是一个不错的包装器吗?或者这是一个全有或全无的过程?
在我的自定义代码中,我一直在使用$_SESSION
来完成与会话相关的所有内容。在Yii生成的事物中,我假设它使用CHttpSession
。使用它们并将它们混合是一个问题吗?
我现在正在将会话处理转移到AWS DynamoDB(https://github.com/aws/aws-sdk-php/blob/master/docs/feature-dynamodb-session-handler.rst),在添加此附加层之前,我想确保所有内容都兼容。
答案 0 :(得分:1)
您可以使用基于数据库的会话来恢复该会话。它真的很简单。只需加上
'session' => array(
'class'=>'CDbHttpSession',
'connectionID' => 'db'
),
在config / main.php组件
上答案 1 :(得分: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
。