[php] 리디렉션 후 PHP 세션이 손실 됨

PHP에서 리디렉션 후 세션이 손실되는 문제를 어떻게 해결합니까?

최근에 리디렉션 후 세션이 손실되는 매우 일반적인 문제가 발생했습니다. 그리고이 웹 사이트를 검색 한 후에도 여전히 해결책을 찾을 수 없습니다 (그러나 이것이 가장 가깝습니다).

최신 정보

답변을 찾았으며 동일한 문제가 발생하는 모든 사람을 돕기 위해 여기에 게시한다고 생각했습니다.



답변

먼저 다음과 같은 일반적인 점검을 수행하십시오.

  1. session_start();세션이 호출되기 전에 호출 되는지 확인하십시오 . 따라서 안전한 시작은 페이지의 시작 부분에서 시작 <?php선언 직후에 다른 것보다 우선하는 것입니다. 또한 오프닝 <?php선언 전에 공백 / 탭이 없는지 확인하십시오 .
  2. header리디렉션 후 다음을 사용하여 현재 스크립트를 종료하십시오 exit();(다른 사람들도 제안 session_write_close();했으며 session_regenerate_id(true), 시도해 볼 수도 있지만 사용할 것입니다 exit();)
  3. 쿠키를 테스트하는 데 사용중인 브라우저에서 쿠키가 활성화되어 있는지 확인하십시오.
  4. 파일 register_globals이 꺼져 있는지 확인 하고 php.ini파일을 사용하여 확인할 수도 있습니다 phpinfo(). 전원을 끄는 방법에 대해서는 이 내용 을 참조하십시오 .
  5. 세션을 삭제하거나 비우지 않았는지 확인하십시오
  6. $_SESSION슈퍼 글로벌 배열 의 키를 덮어 쓰지 않도록 하십시오
  7. 동일한 도메인으로 리디렉션해야합니다. 그래서에서 리디렉션 www.yourdomain.comyourdomain.com앞으로 세션을 수행하지 않습니다.
  8. 파일 확장자가 맞는지 확인하십시오 .php(발생합니다!)

이제 가장 일반적인 실수이지만 트릭을 수행하지 않으면 호스팅 회사와 관련이있을 가능성이 높습니다. 모든 것이 작동 localhost하지만 원격 / 테스트 서버에서는 작동 하지 않으면 이것이 범인 일 가능성이 큽니다. 따라서 호스팅 제공 업체의 지식 기반을 확인하십시오 (포럼도 시도하십시오). FatCow 및 iPage와 같은 회사의 경우을 지정해야 session_save_path합니다. 이렇게 이렇게 :

session_save_path('"your home directory path"/cgi-bin/tmp');
session_start();

( “홈 디렉토리 경로”를 실제 홈 디렉토리 경로로 바꾸십시오. 이것은 일반적으로 제어판 (또는 이와 동등한) 내에 있지만 test.php루트 디렉토리에 파일을 작성하고 다음을 입력 할 수도 있습니다 .

<?php echo $_SERVER['SCRIPT_FILENAME']; ?>

‘test.php’앞의 비트는 홈 디렉토리 경로입니다. 물론 폴더가 실제로 루트 디렉토리 내에 있는지 확인하십시오. (일부 프로그램은 동기화시 빈 폴더를 업로드하지 않습니다)


답변

헤더 호출 후 “종료”를 사용해야합니다

header('Location: http://www.example.com/?blabla=blubb');
exit;


답변

가능한 모든 해결책을 시도했지만 아무도 나를 위해 일하지 않았습니다! 물론 공유 호스팅 서비스를 사용하고 있습니다.

결국, 리디렉션 헤더 내부에서 ‘상대 URL’을 사용하여 문제를 해결했습니다!

header("location: http://example.com/index.php")

세션 쿠키를 무효화

header("location: index.php")

매력처럼 일했다!


답변

나는 같은 문제가 있었다. 나는 몇 시간 동안 일했고 나를 미치게했다.

제 경우에는 Chrome 및 Firefox에서만 favicon.ico가 없어서 404가 호출 되었습니다 . 다른 항해자는 잘 작동했습니다.


답변

내가 header () 함수에서 상대 경로 “dir / file.php”를 사용하면 나를 위해 작동합니다. 전체 URL을 사용하여 리디렉션 할 때 어떤 이유로 세션이 저장되지 않는다고 생각합니다 …

//Does retain the session info for some reason
header("Location: dir");

//Does not retain the session for some reason
header("Location: https://mywebz.com/dir")


답변

이것은 오랫동안 저를 비웃었습니다 (그리고이 게시물은 찾기 좋았습니다!). 그러나 페이지 리디렉션 사이에서 세션을 얻을 수없는 다른 사람들을 위해 … php.ini 파일로 가서 쿠키를 켜야했습니다. :

session.use_cookies = 1 

나는 세션이 쿠키없이 작동한다고 생각했습니다 … 사실 나는 그들이해야한다는 것을 알고 있습니다 … 그러나 이것은 더 큰 그림에서 무슨 일이 일어나고 있는지 이해할 수있을 때까지 내 문제를 해결했습니다.


답변

내 상황이 약간 다르지만 비슷한 문제가있었습니다. 호스트 이름이 windowsIP 주소 인 컴퓨터에 로컬 개발 설정 이있었습니다 192.168.56.2.

다음 중 하나를 사용하여 시스템에 액세스 할 수 있습니다.

로그인 후 PHP 코드는 다음을 사용하여 리디렉션됩니다.

header('http://windows/');

시스템에 액세스하는 데 사용 된 이전 도메인 이름이 아닌 windows경우 세션 데이터가 손실됩니다. 코드를 다음과 같이 변경하여이 문제를 해결했습니다.

header('http://'.$_SERVER['HTTP_HOST'].'/');

사용자가 입력 한 로컬 도메인 이름 또는 IP 주소에 관계없이 작동합니다.

나는 이것이 누군가에게 도움이되기를 바랍니다.