테스트 과정에서 메소드에 에코 및 기타 함수가 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()에 나타남
관심 있는 학생들은 출력 캐시에 데이터가 있는지 테스트할 수 있으며(메소드가 에코와 같은 함수를 사용할 때 인쇄 동작이 있음) headers_sent() 함수가 true를 반환합니다.
이것은 세션이 수행하는 문제를 설명합니다.
메서드에 인쇄 기능이 있으면 적용되지 않습니다.위 내용은 Laravel 5.4 세션 유효성 문제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!