During the testing process, it was found that if the method has echo and other functions output to the output cache of PHP, the sessionID will not be placed in the http request header, and the sessionid will not be obtained in the next request.
Problem Reason
Code location: public/index.php
$response->send();
This method substitute method Code: vendor/symfony/http-foundation/Response. php
/** * Sends HTTP headers. * * @return $this */ public function sendHeaders() { // headers have already been sent by the developer if (headers_sent()) { return $this; } // headers foreach ($this->headers->allPreserveCaseWithoutCookies() as $name => $values) { foreach ($values as $value) { header($name.': '.$value, false, $this->statusCode); } } // status header(sprintf('HTTP/%s %s %s', $this->version, $this->statusCode, $this->statusText), true, $this->statusCode); // cookies foreach ($this->headers->getCookies() as $cookie) { if ($cookie->isRaw()) { setrawcookie($cookie->getName(), $cookie->getValue(), $cookie->getExpiresTime(), $cookie->getPath(), $cookie->getDomain(), $cookie->isSecure(), $cookie->isHttpOnly()); } else { setcookie($cookie->getName(), $cookie->getValue(), $cookie->getExpiresTime(), $cookie->getPath(), $cookie->getDomain(), $cookie->isSecure(), $cookie->isHttpOnly()); } } return $this; }
The previous reason appeared in headers_sent()
Interested students can test if there is data in the output cache (in the method Using functions such as echo has printing behavior) The headers_sent() function returns true
This explains the problem that your session never takes effect when there is a printing function in the method
The above is the detailed content of Laravel 5.4 session validity problem. For more information, please follow other related articles on the PHP Chinese website!