2009-09-20 2 views

답변

13

.

그래도 manual page of session_start을 인용 : 트랜스 SID가 활성화되면 재기록 URL 내부 출력 핸들러를 등록한다

으로 session_start을(). 사용자가 ob_gzhandler를 사용하거나 ob_start()와 같은 경우 출력 핸들러의 순서는 적절한 출력을 위해 이 중요합니다. 예 : 의 경우 세션 시작 전에 ob_gzhandler를 등록해야합니다.

그러나 이것은 출력 핸들러의 순서가 중요하다는 것을 의미합니다. 한 핸들러가 다른 핸들러를 수정하도록하려면, 다른 핸들러에서 수정해야합니다. "올바른 순서. 당신이 핸들러 그런 종류의 사용하지 않는 (아파치를하고 출력을 압축에 관해서 mod_deflate는 예를 들어, 좋은 일을 할) 경우


일반적으로, 중요한 유일한 것은 헤더가 아니어야한다는 것입니다 session_start(구성에 따라 session_start은 HTTP 헤더로 전달되는 쿠키를 전송하기 때문에)을 호출하기 전에 전송됩니다.

그리고 헤더 데이터의 조각으로 즉시 전송은 전송되어야한다 - 즉, 즉시 모든 출력, <?php ?> 태그 밖에서도 하나의 공백이 같이

참고 : 당신이 경우 쿠키 기반 세션을 사용하는 경우 브라우저에 이 출력되기 전에 session_start()를 호출해야합니다. 이 함수는 버퍼링 출력 바뀔 것이다

:

ob_start

은 PHP가 데이터를 버퍼링하는 것을 나타낸다. 출력 버퍼링이 활성화되어 있지만 스크립트 (헤더 제외)에서 출력이 보내지지 않는 대신 출력은 내부 버퍼에 저장됩니다.

실제로는 "데이터 보내기"이라고 말하기 전에 출력이 전송되지 않습니다. 즉, 헤더는 즉시 전송되지 않습니다. 즉, ob_start을 사용하지 않은 경우 나중에 출력 할 수 있더라도 session_start을 나중에 호출 할 수 있습니다.


희망 사항으로 인해 상황이 좀 더 명확 해집니다.

5

기본적으로 output_bufferingOff이며 다음 HTTP 헤더가 이미 전송 된 클라이언트에 다시 데이터의 단일 바이트를 보낼 수있을만큼 불행한 경우. session_start()이 쿠키 헤더를 다시 클라이언트로 전달하지 못하게합니다. ob_start()을 호출하면 버퍼링이 활성화되므로 http 헤더를 보내는 데 시간이 걸립니다.

0

session_start 특정 구성 옵션이 설정된 경우 HTTP 헤더를 수정할 수 있습니다. 예를 들어, session.use_cookiesSet-Cookie 헤더 필드를 설정/수정해야합니다.

HTTP 헤더를 수정하려면 HTTP header이 첫 번째 출력이 전송되기 전에 전송되므로 클라이언트에 이미 전송 된 결과가 없어야합니다.

따라서 session_start을 호출하기 전에 출력이 전혀 출력되지 않도록해야합니다. 또는 이미 출력 된 경우에도 HTTP 헤더를 수정할 수 있도록 output buffering control을 사용하여 출력을 버퍼링합니다.

0

session_start()trans-sid이 활성화 된 경우 URL 재 작성을위한 내부 출력 처리기를 등록합니다. 사용자가 등을 ob_start()과 같이 사용하는 경우 적절한 출력을 위해서는 출력 핸들러의 순서가 중요합니다.

예를 들어, 사용자는 세션 시작 전에 ob_gzhandler을 등록해야합니다.

그러나 이것은 특별한 경우입니다. 여기서, 출력 핸들러의 순서가 중요하다는 것이 여기 있습니다. 한 핸들러가 다른 핸들러를 수정하도록하려면 "올바른"순서로 실행해야합니다. 당신은 핸들러의 종류 사용하지 않는 (아파치를하고, 예를 들어, 출력을 압축에 관해서 mod_deflate은 훌륭한 일을 할) 경우

일반적으로, 중요한 유일한 것은 당신이 호출하기 전에 헤더가 전송되지해야한다는 것입니다 session_start (구성에 따라 session_start은 HTTP 헤더로 전달되는 쿠키를 전송하기 때문에).

그리고 헤더 데이터의 조각으로 즉시 전송은 전송되어야한다 - 즉, 즉시 모든 출력, <?php ?> 태그 밖에서도 하나의 공백이 같이

참고 : 당신이 경우 쿠키 기반 세션을 사용하는 경우 브라우저에 무엇인가 출력되기 전에 session_start()으로 전화해야합니다.

이 함수에서 출력 버퍼링을 설정한다 :

ob_start

은 PHP가 데이터를 버퍼링하는 것을 나타낸다. 출력 버퍼링이 활성화되어 있으면 (헤더가 아닌) 스크립트에서 출력을 보내지 않고 대신 출력이 내부 버퍼에 저장됩니다.

이렇게하면 실제로 "데이터 보내기"라고 말하기 전에 출력이 전송되지 않습니다. 이것은 헤더가 즉시 전송되지 않는다는 것을 의미합니다. 즉, ob_start이 사용되지 않았 으면 출력되어야 할 경우에도 나중에 session_start를 호출 할 수 있습니다.

0

session_start(); 헤더를 보내기 전에 호출해야합니다. ob_start()는 잠시 출력을 억제하므로이 규칙을 위반할 수 있습니다.일반적으로 상단의 ob_start()는 알 수없는 것을 디버깅 할 때를 대비 한 빠른 수정입니다. 아래의 모든 것은 예상대로 작동합니다 (작성된 것만 제외하고 ;-)). 나중에 ob_start()를 session_start()에 사용하는 것을 선호합니다.

관련 문제