2013-06-17 1 views
2

Я использую базу данных mysql для хранения данных сеанса пользователя. Я перенаправляю пользователя на другой сервер с идентификатором сеанса как переменной (GET), а затем мне нужно получить сеанс из БД с помощью идентификатора.YII извлечения сессии из db

код, используемый в моем удаленном сервере:

Yii::app()->session->sessionID = $sessionID; 
    Yii::app()->session->open(); 

результатом является то, что сеанс получает подменяется без каких-либо данных (открывается новая сессия). Как получить сеанс из БД? мне нужно создать модель для таблицы или я могу использовать функции сессии YII?

спасибо, Дэнни

ответ

4

Вы не должны создать модель для таблицы сеанса связи с CDbHttpSessionrelies on PDO to access database.

Какова конфигурация вашего компонента сеанса?

Вы определяете идентификатор сеанса и запускаете сеанс вручную, вызывая метод open(). Этот метод sets session callback methods с использованием функции PHP session_set_save_handler. readSession($id) среди них и согласно странице session_set_save_handler «s вручную:

Эта функция вызывается внутренне PHP, когда сеанс начинается или когда session_start() называется.

Благодаря session_startcreates a session or resumes the current one вы должны предоставить эту сессию не запускается автоматически перед установкой идентификатора сессии. autoStart свойство экземпляра сеанса Yii отвечает за это и должно быть установлено в false (по умолчанию true).

Также необходимо указать идентификатор connectionID вашего подключения к базе данных для получения данных сеанса через. Важно, в противном случае:

Если не установлено, база данных SQLite будет автоматически создана и использована.

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

'session' => array(
    'class' => 'CDbHttpSession', 
    'autoStart' => false, 
    'connectionID' => 'db', 
    'sessionTableName' => 'your_session_table_name', 
    'autoCreateSessionTable' => false // for performance reasons 
) 
+0

Это как раз то, как выглядит моя конфигурация :) ... теперь вы говорите, что все, что мне нужно, - это получить сеанс с помощью стандартного построителя запросов YII? –

+2

BTW вам не нужно использовать sessionTableName, если вы хотите использовать значение по умолчанию - YIISession –

+0

спасибо, работал как шарм! не нужно было использовать построитель запросов после добавления autostart = false. –

0

PHP хранит SESSIONID в печенье с этим именем (PHPSESSID) Yii также магазин идентификатора сессии в куки браузера (потому что он использует сеансы php по умолчанию). Если вы измените PHPSESSID varaible в cookie, вы сможете изменить наш сеанс. Просто вы должны это сделать

setcookie('PHPSESSID',$sessionId); // где $ sessionId - это ваш идентификатор сеанса, который вы читаете из db, и этот сеанс должен существовать.

+0

это не то, как настроен сеанс. Я боюсь ... я сохраняю идентификатор сеанса со всеми переменными и данными (как объект) в самой БД. см.: CDbHttpSession - http: // www.yiiframework.com/doc/api/1.1/CDbHttpSession –