【问题标题】:Are Yii sessions and PHP sessions cross-compatible?Yii 会话和 PHP 会话是否交叉兼容?
【发布时间】:2014-02-23 16:35:30
【问题描述】:

在 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),在我添加这个附加层之前,我想确保一切都是兼容的。

【问题讨论】:

    标签: php session yii amazon-web-services


    【解决方案1】:

    您可以使用基于数据库的会话来恢复它。它真的很简单。放个

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

    关于 config/main.php 组件

    【讨论】:

      【解决方案2】:

      CHttpSession 是一个漂亮的 OO 包装器,用于 php 会话。底层实现使用 php 的 session 方法。这是CHttpSession::open()的部分代码的sn-p:

      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

      【讨论】:

      • 好。您认为它会对我包含的链接产生任何影响吗?我正在更改自定义存储,但我没有处理执行此操作的代码,AWS 为我执行此操作。它仍然应该自动工作,对吗? github.com/aws/aws-sdk-php/blob/master/docs/…
      • 我不确定它是否会自动工作或它可能会产生什么影响。您可能必须覆盖子类中的 openSession 方法以包含 github sn-ps,并将此类用作会话包装器。祝测试愉快。
      • 您可以使用基于数据库的会话来恢复它。它真的很简单。只需将 'session' => array( 'class'=>'CDbHttpSession', 'connectionID' => 'db', //'timeout' => 86400, ),放在 config/main.php 组件上
      猜你喜欢
      • 1970-01-01
      • 2016-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-24
      • 2012-11-12
      相关资源
      最近更新 更多