我使用Yii 框架,在框架中我使用第 3 方应用程序,即mibew Messenger(或聊天)。
我需要将$_session
变量(用户名和密码)从 yii 框架传递给Mibew messenger,我需要这个,因为我想在登录到我的 yii 应用程序时自动登录。
Mibew messenger文件夹位于应用程序的 app 文件夹中。
那么如何在yii 框架之外使用相同的会话呢?
谢谢您的帮助。
我认为您可以执行以下操作:
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()
您可以通过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;
这是为您自己制作的细节。
对于 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>';