2013-12-23 3 views
2

У меня есть проект yii и в сеансах Chrome потеряно. Пример: конфигурации в main.phpYii проиграет сеанс после перенаправления

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

в запуске контроллера после входа в систему я написать идентификатор пользователя в сессии

Yii::app()->user->id = 100 

после того, как я перенаправлять пользователю

$this->redirect(array('student/index'), true); 

, но в действии индекса я не могут получать данные с сессии

echo Yii::app()->user->id; 

ничего не дают. Пожалуйста, помогите, эта проблема разбился мой мозг уже

+0

что вы пытаетесь сделать ?? как Yii :: app() -> user-> id относится к сеансу здесь? –

+0

PLS опубликовать свой идентификационный код ... –

+0

http://pastebin.com/bBV1J4XN – 6yt9Bka

ответ

0

Вы должны попробовать

'autoStart' => true, 
+0

Я пробовал, не помогая – 6yt9Bka

+0

может это вам поможет. http://php.refulz.com/configuring-session-in-yii-framework-cdbhttpsession/ –

+0

не помогает, я смотрю таблицу ph_YiiSession и имею 1 строку, но в столбце 'data' ничего. – 6yt9Bka

0
Yii::app()->user->id = 100 

Прежде всего

Вы не можете установить Id как это постоянно, что может работать в разных страницы. Даже если вы зададите идентификатор на странице, его данные будут потеряны, как только вы перейдете на следующую страницу, и он покажет свое значение по умолчанию. Поэтому, если вы хотите изменить значение, которое содержит Yii::app()->user->id, вам придется переопределить метод getId().

Вторая вещь

Если вы пытаетесь сохранить Id в сессии, то вы должны использовать Yii::app()->session['_myId']=Yii::app()->user->id; , а затем вы можете получить его как

echo Yii::app()->session['_myId']; 

и помните 'autoStart' => TRUE,

+0

1. Я сделал это как пример для показа. 2. Я сделал это уже (используйте сеанс ['_ myId]), не работает, в db - ничего. – 6yt9Bka

+0

вы можете показать, как вы сохраняете данные в сеансе –

+0

, например: в контроллере сайта я пишу Yii :: app() -> session ['value'] = '12345'; После перенаправления на другой контроллер: echo Yii :: app() -> session ['value']; - ничего не отображается, ничего в db – 6yt9Bka

0

Что вы ошибаетесь, определенно в классе UserIdentity. Наилучшим способом установки и получения данных сеанса от Yii::app()->user->id является переопределение метода getId() в классе UserIdentity.

Например, скажем, что у вас есть таблица с именем «Пользователь», и она содержит: id, username, password.

Таким образом, сделать класс UserIdentity что-то вроде этого:

<?php 

/** 
* UserIdentity represents the data needed to identity a user. 
* It contains the authentication method that checks if the provided 
* data can identity the user. 
*/ 
class UserIdentity extends CUserIdentity 
{ 

    private $_id; 

    public function authenticate() 
    { 
     $user = User::model()->find('LOWER(username)=?',array(strtolower($this->username))); 
     if($user===null){ 
      $this->errorCode=self::ERROR_USERNAME_INVALID; 

     }else if($user->password !== crypt($this->password,$user->password)){ 
      $this->errorCode = self::ERROR_PASSWORD_INVALID; 
     } 
     else{ 
      $this->_id = $user->id; 
      $this->username = $user->username; 
      $this->errorCode = self::ERROR_NONE; 
     } 
     return $this->errorCode === self::ERROR_NONE; 
    } 

    public function getId() 
    { 
     return $this->_id; 
    } 
} 

После того, как вы сделаете это, вы должны быть в состоянии использовать Yii :: приложение() -> user-> ID и получить идентификатор сессии в любом месте вашего кода.

Надеюсь, это помогло.

P.S> Я также сделал базовое приложение, где все это уже сделано. Вы можете проверить это: https://github.com/sankalpsingha/yii-base-app это может вам помочь.

+0

my UserIdentity: http://pastebin.com/vcELsG2k, thx, но не помогает. – 6yt9Bka

+0

в процессе я нахожу это хранилище сеансов файла (я изменяю с CDbHttpSession на CHttpSession), но данные в них НЕ. В этой среде существует другое приложение, использующее сеанс и в порядке. Это волшебство для меня. – 6yt9Bka

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