Yii を使用して簡単な Web サイトを作成し、Yii ユーザー拡張機能を使用しました。同じサーバーに別のphpファイルがあります(loader.phpという名前を付けましょう)。
現在 Yii にログインしているユーザーを loader.php で取得したいと考えています。Yii ユーザー拡張機能にセッションが設定されていないことに気付きました。
2 に答える
私はこれが 2 か月前のものであることを知っていますが、おそらく他の誰かがこれを参考にすることができます。私は同じ問題を抱えています。creatorR のおかげで解決策を得ることができました。ここで確認できます 。サードパーティ アプリケーション
次のように yii.php と構成ファイルを含める必要があります。
require('../../framework/yii.php');
$config = require('../../protected/config/main.php');
次のことを行う必要があります。
Yii::createWebApplication($config);
このように var_dump を使用すると、必要な情報が得られます。この例では id です。
var_dump(Yii::app()->User->id);
Yii では、これを使用してユーザーの ID を取得できます。
$userId = Yii::app()->user->Id;
ユーザーがログインし、CWebUser オブジェクトがセッションに保存された場合、ユーザーの ID が表示されます。
初期化の過程で、CWebUser は CWebUser->getState('__id') を使用してユーザーの ID を取得し、デフォルトでは、Yii のセッションからデータを取得しようとします。Yii のデフォルト セッション コンポーネントを使用する場合、CWebUser は ID を求めて $_SESSION[$key] を調べます。$key は次のとおりです。
CWebUser.php:567:
$key=$this->getStateKeyPrefix().$key;
CWebUser.php:540:
return $this->_keyPrefix=md5('Yii.'.get_class($this).'.'.Yii::app()->getId());
したがって、セッションから user_id を取得するための $key は md5('Yii.'.get_class($this).'.'.Yii::app()->getId()) です。
Yii::app()->getId() とは?
CApplication.php:232:
return $this->_id=sprintf('%x',crc32($this->getBasePath().$this->name));
したがって、「loader.php」では、これを使用して user_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 でデフォルトの CSession コンポーネントを使用している場合、user_id を取得するのは簡単ですが、他のクラスを使用している場合、たとえば、PHP のデフォルトのメカニズムの代わりに redis または mongoDB を使用してセッションを保存するクラスを使用している場合は、次のようにする必要があります。このストレージからデータを取得するために、さらに作業を行います。