【发布时间】:2013-11-23 02:01:45
【问题描述】:
我使用 Yii 框架,并且在该框架中我使用第三方应用程序,即 mibew Messenger(或聊天)。
我需要将$_session变量(用户名和密码)从yii框架传递给Mibew messenger,我需要这个是因为我想在我登录到我的yii时自动登录应用。
Mibew messenger文件夹位于应用程序的app文件夹中。
那么我怎样才能在 yii 框架 之外使用相同的会话呢?
感谢您的帮助。
【问题讨论】:
我使用 Yii 框架,并且在该框架中我使用第三方应用程序,即 mibew Messenger(或聊天)。
我需要将$_session变量(用户名和密码)从yii框架传递给Mibew messenger,我需要这个是因为我想在我登录到我的yii时自动登录应用。
Mibew messenger文件夹位于应用程序的app文件夹中。
那么我怎样才能在 yii 框架 之外使用相同的会话呢?
感谢您的帮助。
【问题讨论】:
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>';
【讨论】:
我认为你可以这样做:
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)。
我不检查它的解决方案。如果会有错误 - 写在 cmets 上。
更新
只需要做:
require('/path/to/framework/YiiBase.php'); $config = require('/path/to/configs_directory/main.php'); Yii::createWebApplication($config);
你可以使用Yii::app()的所有框架功能
【讨论】:
YiiBase.php 和您的配置。 do Yii::createWebApplication($config) (如index.php 没有调用方法run())。然后,我认为,您可以在第三个应用程序中使用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;
这是您自己制作的细节。
【讨论】: