PHP에서 리디렉션 후 세션이 손실되는 문제를 어떻게 해결합니까?
최근에 리디렉션 후 세션이 손실되는 매우 일반적인 문제가 발생했습니다. 그리고이 웹 사이트를 검색 한 후에도 여전히 해결책을 찾을 수 없습니다 (그러나 이것이 가장 가깝습니다).
최신 정보
답변을 찾았으며 동일한 문제가 발생하는 모든 사람을 돕기 위해 여기에 게시한다고 생각했습니다.
답변
먼저 다음과 같은 일반적인 점검을 수행하십시오.
session_start();
세션이 호출되기 전에 호출 되는지 확인하십시오 . 따라서 안전한 시작은 페이지의 시작 부분에서 시작<?php
선언 직후에 다른 것보다 우선하는 것입니다. 또한 오프닝<?php
선언 전에 공백 / 탭이 없는지 확인하십시오 .header
리디렉션 후 다음을 사용하여 현재 스크립트를 종료하십시오exit();
(다른 사람들도 제안session_write_close();
했으며session_regenerate_id(true)
, 시도해 볼 수도 있지만 사용할 것입니다exit();
)- 쿠키를 테스트하는 데 사용중인 브라우저에서 쿠키가 활성화되어 있는지 확인하십시오.
- 파일
register_globals
이 꺼져 있는지 확인 하고php.ini
파일을 사용하여 확인할 수도 있습니다phpinfo()
. 전원을 끄는 방법에 대해서는 이 내용 을 참조하십시오 . - 세션을 삭제하거나 비우지 않았는지 확인하십시오
$_SESSION
슈퍼 글로벌 배열 의 키를 덮어 쓰지 않도록 하십시오- 동일한 도메인으로 리디렉션해야합니다. 그래서에서 리디렉션
www.yourdomain.com
을yourdomain.com
앞으로 세션을 수행하지 않습니다. - 파일 확장자가 맞는지 확인하십시오
.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
나는 세션이 쿠키없이 작동한다고 생각했습니다 … 사실 나는 그들이해야한다는 것을 알고 있습니다 … 그러나 이것은 더 큰 그림에서 무슨 일이 일어나고 있는지 이해할 수있을 때까지 내 문제를 해결했습니다.
답변
내 상황이 약간 다르지만 비슷한 문제가있었습니다. 호스트 이름이 windows
IP 주소 인 컴퓨터에 로컬 개발 설정 이있었습니다 192.168.56.2
.
다음 중 하나를 사용하여 시스템에 액세스 할 수 있습니다.
로그인 후 PHP 코드는 다음을 사용하여 리디렉션됩니다.
header('http://windows/');
시스템에 액세스하는 데 사용 된 이전 도메인 이름이 아닌 windows
경우 세션 데이터가 손실됩니다. 코드를 다음과 같이 변경하여이 문제를 해결했습니다.
header('http://'.$_SERVER['HTTP_HOST'].'/');
사용자가 입력 한 로컬 도메인 이름 또는 IP 주소에 관계없이 작동합니다.
나는 이것이 누군가에게 도움이되기를 바랍니다.