3

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

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

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

那么如何在yii 框架之外使用相同的会话呢?

谢谢您的帮助。

4

3 回答 3

1

我认为您可以执行以下操作:

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->get/set($var_name).

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

更新

只需要这样做:

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

比您可以使用所有框架功能Yii::app()

于 2013-11-11T10:18:01.713 回答
1

您可以通过Yii::app()->user->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;

这是为您自己制作的细节。

于 2013-11-11T10:53:56.263 回答
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 和 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>';
于 2017-07-03T07:09:13.280 回答