在測試過程中發現如果方法有echo 等函數輸出到PHP的輸出快取中存在 sessionID 不會放到http的請求頭中 下次請求也就拿不到sessionid問題
#問題的原因
程式碼位置:public/index.php
$response->send();
此方法代用方法 程式碼: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; }
以前的原因出現在 headers_sent() 中
有興趣的同學可以測試一下如果輸出快取存在資料(在方法使用echo 之類的函數有列印行為) headers_sent() 函數則回傳ture
這樣就解釋了在方法中存在列印的函數時候 你的session始終沒有生效問題
以上是Laravel 5.4 session 生效問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!