nette/http

Unable to set 'session.gc_maxlifetime'

krasa opened this issue · 0 comments

krasa commented

Version: nette/http v3.2.2

Bug Description

gc_maxlifetime calculation is inaccurate, causing rare random errors:

Nette\InvalidStateException: Unable to set 'session.gc_maxlifetime' to value '1209599' when session has been started by session.auto_start or session_start().
Nette\InvalidStateException: Unable to set 'session.gc_maxlifetime' to value '1209600' when session has been started by session.auto_start or session_start(). 

config.neon:

session:
  expiration: 14 days 

Stack:

Session.php:460, Nette\Http\Session->configure()
Session.php:426, Nette\Http\Session->setOptions()
Session.php:516, Nette\Http\Session->setExpiration()
Container_b8ee45f4b9.php:2205, Container_b8ee45f4b9->createServiceSession__session()
Container.php:210, Nette\DI\Container->createService()
Container.php:126, Nette\DI\Container->getService()
Container_b8ee45f4b9.php:2245, Container_b8ee45f4b9->{closure:D:\_C\xampp\htdocs\...}()
Container_b8ee45f4b9.php:2246, Container_b8ee45f4b9->initialize()
Configurator.php:243, Nette\Bootstrap\Configurator->createContainer()
index.php:7, {main}()

Or maybe something else is wrong, because it may have started after manually starting sessions in our OAuth login presenter:

  public function renderOauth()
  {
    if (!$this->getSession()->exists())
    {
      // https://diskuse.jakpsatweb.cz/?action=vthread&forum=9&topic=128222#6
      ini_set("session.gc_maxlifetime", self::SESSION_GC_MAXLIFETIME); //14 * 24 * 60 * 60 = 1209600

      //fixes: Undefined global variable $_SESSION
      $this->getSession()->start();
    }
    ...
  }

Possible Solution

  • fix the expiration time calculation
  • add ini_get("session.$key") to that exception message, for easier diagnostics