Yii2 сессия очищается после авторизации

393
26 апреля 2017, 13:08

Здравствуйте.
Делаю простой интернет-магазин. После авторизации пользователя сессия почему-то очищается. Я в LoginForm.php немного изменила код, чтобы через var_dumb() посмотреть, сохраняется ли в сессию id пользователя.

public function login()
{
    session_start();
    $this->_user = User::findByUsername($this->username, $this->password);
    $_SESSION['user_id'] = $this->_user->getId();
    var_dump($_SESSION['user_id']);
    if ($this->_user) {
        return Yii::$app->user->login($this->getUser(), $this->rememberMe ? 3600 * 24 * 30 : 0);
    } else {
        return false;
    }
}

Возымело интересный эффект, потому как после вывода мне id (он таки сохраняется) я снова перезагружаю страничку и я залогиниваюсь. Но если убрать var_dumb(), то сессия стирается.
Подскажите, пожалуйста, как решить эту проблему.

Настройки конфига фронтенда:

'user' => [
        'identityClass' => 'common\models\User',
        'enableAutoLogin' => true,
        'identityCookie' => ['name' => '_identity-frontend', 'httpOnly' => true],
    ],
Answer 1
  1. Нужно использовать сессионную обертку Yii: http://www.yiiframework.com/doc-2.0/guide-runtime-sessions-cookies.html , вместо $_SESSION - так будет и правильнее и меньше неожиданностей
  2. Напишите Yii::$app->session->open(); в методе init() контроллера, а не внутри login() - тогда сессия будет открываться и работать до процесса залогинивания.
  3. Т.к. контроллеров у Вас много, то сделайте свой "базовый контроллер" abstract class BaseController extends \yii\web\Controller { и наследейте все контроллеры от него: class SiteController extends BaseController. Собственно в нем и лучше завести метод init() со стартом сессии (Yii::$app->session->open();), тогда сессия будет работать во всех контроллерах гарантированно
READ ALSO
Как написать такой .htaccess?

Как написать такой .htaccess?

Как написать в правилоhtaccess, чтобы при заходе на сайт переправляло на public/index

194
SELECT * FROM “название стола в переменной”

SELECT * FROM “название стола в переменной”

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

216
регулярное выражения php

регулярное выражения php

Здравствуйтехочу получит счет:

249