2013-06-25 4 views
-1

이 로그인 시스템에서 작업 중이므로 물론 사용자가 로그인 할 때 세션 ID를 재생성합니다. 하지만 세션 ID를 다시 생성 한 후에도 쿠키에 토큰을 저장하려고합니다. 그러나 나는 같은 페이지에서 그렇게 할 수 없을 것 같다. 나는라는 오류가 발생합니다 :session_regenerate_id와 setcookie가 PHP의 같은 페이지에 있습니다.

경고 :에도 session_regenerate_id() [function.session-중생-ID] : 세션 ID를 다시 생성 할 수 없습니다 - 이미 줄에 /htdocs/somesite/test.php 전송 헤더 (44)

경고 : 헤더 정보를 수정할 수 없습니다 - 이미가 보낸 헤더는 라인 (54)

에 /htdocs/somesite/test.php에 (출력 //htdocs/somesite/test.php:76에서 시작)이 내가 지금 당장하고 있습니다.

session_regenerate_id();
setcookie("Foo","Bar", time()+$CookieExpireTime,"/");

이 문제를 해결하려면 궁금합니다. 로컬 호스트에서 테스트 중이면 서버가 작동하지 않습니다 ...

+0

감사합니다 얘들 아, 실제로 session_regenerate_id 전에 나오는 출력이 있었는데 방금 그것을 놓쳤습니다 ... –

답변

0

일반적인 원인 : 이 경고는 종종 .php 파일의 시작 또는 끝에 빈 공간이나 여분의 줄로 인해 발생합니다. : (파일 이름 "출력에서 .... 시작"예) 텍스트 편집기에서 해당 파일을 열고 바로 첫 번째

전에 여분의 공백이나 줄을 제거 오류를 생성 한 파일 이름에 대한 오류를 확인 기타 원인 : 구문 오류 위의 예에서 출력은 /....includes/something/something/something.php:12에서 시작됩니다. includes/something/something/something.php는 걱정할 필요가있는 파일 이름입니다. : 12는 수정해야 할 문제가 12 행에 있음을 의미합니다. 동일한 예에서 "in /includes/something_else.php on line 67"메시지는 완전히 무시할 수 있습니다. 그것은 문제가 아닙니다. 문제가 이미 발생했음을 발견 한 사람입니다.

다른 오류가 발생하여 "헤더를 이미 보냈습니다"오류가 나타나면 다른 오류 FIRST을 수정해야합니다. (오류 메시지 자체가 헤더를 보내 게 된 원인이기 때문에 오류를 수정하면 두 번째 오류도 사라집니다.)

"시작 시간"이 1 번째 라인을 나타내는 경우, <?php 태그를 열거 나 파일의 인코딩이 잘못되었습니다. 언어가 UTF8 인 경우 파일을 "UTF8-without-BOM"으로 인코딩해야합니다. 그렇지 않으면 BOM (파일의 시작 부분에 보이지 않는 문자)이 동일한 헤더를 생성합니다 - 이미 보낸 오류.

요약 :

A)는

B '에서 시작'곳을 찾아))는 행 번호를

C를 추적 일반적으로 그 라인에 무슨 일이 일어나고 있는지 확인하십시오.

  • 파일 끝에있는 경우 공백입니다.
  • 파일의 시작 부분 인 경우 공백 또는 잘못된 인코딩 일 가능성이 높습니다.
  • 다른 곳에서는 구문 오류이거나 정보 또는 디버그 코드를 표시하는 "echo()"문의 결과 일 수 있습니다.
  • 일반적인 구문 오류는 이미 작은 따옴표가있는 문 안에 작은 따옴표를 사용하는 것을 포함합니다. 따옴표가 일치하지 않는지 확인하십시오. 다른 작은 따옴표 안에서 작은 따옴표를 사용해야하는 경우에는 '대신'대신 \ '로 변경하십시오.

d) 나머지 정보는 다른 실행 정보, 주로 'started at'위치에서 발생한 문제로 인해 예상대로 진행될 수 없다는 것을 발견 한 코드 부분을 보여줍니다.

출처 : zen-cart.com

또 다른 유사한 스레드 SO에 : How to fix "Headers already sent" error in PHP

도움이 되었기를 바랍니다.

0

문제는 두 가지 기능과 관련이 없습니다. 문제는 페이지로 출력 된 후 session_regenerate_id()에 연결할 수 없다는 것입니다 . 어떤 종류의 출력이 페이지로 보내지기 전에 header()과 같은 함수가 호출되어야합니다.

출력을 보내기 전에이 함수가 호출되도록 페이지를 다시 구성하거나 출력 버퍼링을 사용하여 페이지 내용을 보내기 전에이 함수가 호출되도록하십시오.