2013-08-20 4 views
4

Я сделал простой сайт с использованием Yii, и я использовал расширение Yii-пользователя. У меня есть отдельный php-файл на том же сервере (давайте назовите его loader.php).
Я хочу получить текущий Yii зарегистрированный пользователь в loader.php. Я понял, что в Yii-пользовательском расширении нет сеанса, тогда как я могу это сделать?Получить текущий пользователь от Yii за пределами веб-сайта

+0

Почему именно так? – JalalJaberi

ответ

1

В Yii вы можете получить идентификатор пользователя с помощью этого:

$userId = Yii::app()->user->Id; 

Это даст идентификатор пользователя, если пользователь logined и объект CWebUser был сохранен в сессии.

В процессе инициализации CWebUser использует CWebUser-> getState ('__ id') для получения идентификатора пользователя и по умолчанию пытается получить данные из сеанса Yii. Если вы используете компонент сессии по умолчанию Yii, в CWebUser будет выглядеть в $ _SESSION [$ ключ] для и ID, а $ ключ:

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

CWebUser.php:540: 
return $this->_keyPrefix=md5('Yii.'.get_class($this).'.'.Yii::app()->getId()); 

Итак, ваш $ ключ, чтобы получить user_id от сессии является: md5 (» Yii 'Yii :: приложение(). get_class ($ это).. -..> 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!"; 

повторяю: если вы используете компонент CSession по умолчанию в Yii, его легко получить user_id, но если вы используете какой-либо другой класс, например, тот, который использует redis или mongoDB для хранения сеансов вместо механизма PHP по умолчанию - вам придется сделать еще одну работу для получения данных из этих хранилищ.

3

Я знаю, что это 2 месяца, но, возможно, кто-то может найти это полезным, я такая же проблема, и благодаря создателю я смог получить решение, вы можете проверить его здесь How can i use session from yii framework into my 3rd party application

вы должны включить yii.php и конфигурационный файл, как это:

require('../../framework/yii.php'); 
$config = require('../../protected/config/main.php'); 

чем вам нужно сделать следующее:

Yii::createWebApplication($config); 

, и если вы используете var_dump, как это, вы получите нужную вам информацию, в этом примере - id,

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

Только то, что я искал, спасибо! –

Смежные вопросы