从网站外的Yii获取当前用户

从网站外的Yii获取当前用户,yii,Yii,我已经做了一个简单的网站使用Yii和我使用Yii用户扩展。我在同一台服务器上有一个单独的php文件(命名为loader.php)。 我想在loader.php中获取当前Yii登录用户。我已经意识到Yii用户扩展中没有设置会话,那么我如何才能做到这一点?在Yii中,您可以使用以下方法获取用户ID: $userId = Yii::app()->user->Id; 若用户已登录,并且CWebUser对象已保存在会话中,它将给出用户的ID 在初始化过程中,CWebUser使用CWebUse

我已经做了一个简单的网站使用Yii和我使用Yii用户扩展。我在同一台服务器上有一个单独的php文件(命名为loader.php)。

我想在loader.php中获取当前Yii登录用户。我已经意识到Yii用户扩展中没有设置会话,那么我如何才能做到这一点?

在Yii中,您可以使用以下方法获取用户ID:

$userId = Yii::app()->user->Id;
若用户已登录,并且CWebUser对象已保存在会话中,它将给出用户的ID

在初始化过程中,CWebUser使用CWebUser->getState(“\uu id”)获取用户的id,默认情况下,它尝试从Yii的会话获取数据。如果使用Yii的默认会话组件,CWebUser将查找和ID的$_会话[$key],其中$key是:

CWebUser.php:567:
$key=$this->getStateKeyPrefix().$key;

CWebUser.php:540:
return $this->_keyPrefix=md5('Yii.'.get_class($this).'.'.Yii::app()->getId());
因此,从会话中获取用户id的$key是:md5('Yii.'.get_class($this)。'.Yii::app()->getId()

什么是Yii::app()->getId()

因此,在“loader.php”中,您可以使用它为用户id创建一个密钥:

$basePath = "/var/www/yii-app.com/protected";//Place here your app basePath by hands.
$app_name = "My super app";//Place here your real app name
$app_id = sprintf('%x',crc32($basePath.$this->name));
$class = "CWebUser";//Place here your real classname, if you using some other class (for example, I'm using my own implementation of the CWebUser class)
$key = md5('Yii.'.$class.'.'.$app_id) . "__id";

session_start();
$user_id = $_SESSION[$key];
echo "USER ID is:" . $user_id;
//Now you can user $user_id in any way, for example, get user's name from DB:
mysql_connect(...);
$q = mysql_query("SELECT name FROM users WHERE id='" . (int)$user_id ."';";
$data = mysql_fetch_array($q, MYSQL_ASSOC);
echo "Hello, dear " . $data['name'] . ", please dont use this deprecated mysql functions!";

我重复一遍:如果你在yii中使用默认的CSSession组件,很容易获得用户id,但是如果你使用其他类,例如,使用redis或mongoDB来存储会话的类,而不是PHP的默认机制-你必须做更多的工作才能从这些存储中获取数据。

我知道这已经有2个月了,但也许其他人会觉得这很有帮助,我也有同样的问题,多亏了creatoR,我才能够找到解决方案, 你可以在这里查一下

您应该包括yii.php和如下配置文件:

require('../../framework/yii.php');
$config = require('../../protected/config/main.php');
然后您需要执行以下操作:

Yii::createWebApplication($config);
如果你像这样使用var_dump,你会得到你需要的信息,在这个例子中是id

var_dump(Yii::app()->User->id);

到底为什么要投否决票?
var_dump(Yii::app()->User->id);