【问题标题】:How can i use session from yii framework into my 3rd party application如何将 yii 框架中的会话用于我的 3rd 方应用程序
【发布时间】:2013-11-23 02:01:45
【问题描述】:

我使用 Yii 框架,并且在该框架中我使用第三方应用程序,即 mibew Messenger(或聊天)。

我需要将$_session变量(用户名和密码)从yii框架传递给Mibew messenger,我需要这个是因为我想在我登录到我的yii时自动登录应用。

Mibew messenger文件夹位于应用程序的app文件夹中。

那么我怎样才能在 yii 框架 之外使用相同的会话呢?

感谢您的帮助。

【问题讨论】:

    标签: php yii


    【解决方案1】:

    Yii2 是这样完成的:

    defined('YII_DEBUG') or define('YII_DEBUG', true);  //set these according to your needs
    defined('YII_ENV') or define('YII_ENV', 'dev');
    
    require(__DIR__ . '/../vendor/autoload.php');
    require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
    
    $config = require(__DIR__ . '/../config/web.php');
    
    new yii\web\Application($config);
    

    那么您可能希望立即打开会话,以便以后 $_SESSION 始终可用:

    Yii::$app->session->open();
    

    您现在可以像平常一样使用$_SESSION,也可以使用例如。 Yii::$app->session['sessionvarname'] = 'somevalue';(或指南章节Session and Cookies中描述的任何方法)。

    另外,如果你想使用 Yii 中的一些资源,你可以像这样加载它们:

    $asset = Yii::$app->assetManager->getBundle('yii\web\YiiAsset', true);
    echo yii\helpers\Html::jsFile(Yii::$app->assetManager->getAssetUrl($asset, 'yii.js'));
    // -- or --
    echo '<script type="text/javascript" src="'. Yii::$app->assetManager->getAssetUrl($asset, 'yii.js') .'"></script>';
    

    【讨论】:

      【解决方案2】:

      我认为你可以这样做:

      1) 在您需要访问 SESSION 的第 3 方应用程序文件中:

      require('/path/to/framework/YiiBase.php');
      

      2) 如果您有特定的会话配置,那么您需要配置:

      $config = require('/path/to/protected/config/main.php');
      $session = YiiBase::createComponent($config['components']['session']);
      

      3) 对于标准会话(而不是第 2 步),您应该尝试:

      $session = new CHttpSession();
      

      您可以在框架中使用会话:$session[$var_name]$session-&gt;get/set($var_name)

      我不检查它的解决方案。如果会有错误 - 写在 cmets 上。

      更新

      只需要做:

      require('/path/to/framework/YiiBase.php');
      $config = require('/path/to/configs_directory/main.php');
      Yii::createWebApplication($config);
      

      你可以使用Yii::app()的所有框架功能

      【讨论】:

      • 谢谢你的回答,如果我需要使用'Yii::app()->user',你知道我应该怎么做吗?我需要包含任何其他文件吗?谢谢
      • 是的,你需要创建一个 CWebUser 的对象。它对象从会话本身获取所有信息。等一下。新解决方案(如果正确,我将重写我的答案):尝试包含 YiiBase.php 和您的配置。 do Yii::createWebApplication($config) (如index.php 没有调用方法run())。然后,我认为,您可以在第三个应用程序中使用Yii::app()。它必须工作!
      • 好的,我把 require('../../framework/YiiBase.php');要求('../../protected/config/main.php'); Yii::createWebApplication($config);我得到了错误,致命的一个:) (!)致命错误:无法在第 55 行的 /opt/local/www/projects/theuniversalgroup/app/framework/YiiBase.php 中重新声明类 YiiBase跨度>
      • 对不起,我的错误,我添加了一些代码,现在没关系 :) 我忘了添加 $config 等于:) 像这样:require('../../framework/yii.php '); $config = require('../../protected/config/main.php'); Yii::createWebApplication($config);
      【解决方案3】:

      您可以通过Yii::app()-&gt;user-&gt;id;获取登录的用户ID,然后使用登录的ID在您的数据库中查询用户名和密码,如下所示:

      $userInfo = User::model()->findByPk(array('id'=>Yii::app()->user->id));
      $user = $userInfo->username;
      $password = md5($this->userInfo->password);
      

      现在您可以将这些变量放入我认为不必要的会话中。因为你应该把这些变量直接放到mibew中。但是,如果您想将这些变量放入 Yii 会话中,只需执行以下操作:

      Yii::app()->session['usename']  = $user;
      Yii::app()->session['password'] = $password;
      

      这是您自己制作的细节。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-09-02
        • 2013-05-21
        • 2014-09-04
        • 1970-01-01
        • 2020-07-14
        • 1970-01-01
        • 2012-12-21
        相关资源
        最近更新 更多