0

My login worked perfectly with PHP sessions. I tried switching to DbSession engine but login will not work anymore, as the session is empty after the page redirection.

Here's the workflow:

  1. User enters his user id and clicks submit to post the data
  2. Validation works (I tested) and a new identity cookie is created with the key sess = XXXX (tested with log just before redirect).
  3. The $_SESSION is filled with the user data (tested with log just before redirect)
  4. The page redirects with the new response cookie.
  5. The password page loads and the request cookie has the same XXXX value (tested with log just after redirect + in chrome developer tools).
  6. The session now only contains

    [__flash] => Array ( )

response cookie "sess" = request cookie "sess" = id in the session table, so the same key is everywhere, yet the session is still empty on the password page, 90% of the time (because in some random cases, the session is still there, but I can't reproduce it on demand)

I already checked these questions, not the same problem:
PHP session lost after redirect
Session lost after redirect in Codeigniter

Has anyone seen something similar before? I can't figure out what's causing this.

Addendas:
Session configuration

'session' => [
    'class' => 'yii\web\DbSession',
    'name' => 'sess',
    'timeout' => 3600,
    'db' => 'session_db',
    'sessionTable' => 'session', 
],

Session db config

$config['components']['session_db'] = [
    'class' => 'yii\db\Connection',
    ...
],

Login action

// authenticate() Just checks if the user is valid, etc
Yii::$app->user->authenticate();

// login() just calls parent::login(), sets some session values then returns !$this->getIsGuest()
Yii::$app->user->login(Yii::$app->user);

update!! I have just noticed that if I use the same database instead of "db" (my main db) instead of "session_db", it works perfectly, even if both tables have exactly the same schema in the 2 databases.

0 Answers0