지금 세션에 문제가 있습니다. 스크립트에서 로그인을 사용하여 초기 인증을 한 다음 각 보호 된 페이지의 시작 부분에서 인증하고 마지막으로 (아래 코드)을 시도해보십시오.브라우저를 다시 시작한 후에도 세션이 종료됩니다.
파일은 PHP 5.6을 사용하여 내 서버에 있습니다. 내 PC에서 Win10과 Chrome을 사용하고 있습니다.
현상 : 세션 바르가 파괴되어 있지만
이, 난 아직 인증을 수행하는 페이지를 보려면 브라우저의 '뒤로'버튼을 사용할 수 있습니다. 그 페이지에 $ _SESSION vars를 덤프하면 (브라우저의 뒤로 버튼을 사용하여 다시 탐색했을 때) $ _SESSION var은 모두 존재하지 않지만 페이지는 여전히로드됩니다.
쿠킹이 아직 있습니다. 나는 테스트를 위해 1 (1 초) 내 php ini에 쿠키 수명을 설정했습니다 ... 그들은 내가 그들을 삭제하려고 한 후에도 여전히 거기에 있습니다. 0으로 설정 한 경우에도 브라우저를 다시 시작한 후에도 계속 표시됩니다.
위의 증상 1을 읽고 나면 많은 사람들이 세션이 여전히 살아 있고 잘 작동하고 있다고 생각할 것입니다. 브라우저를 닫은 후에도 다시 시작하고 보호 된 페이지 중 하나의 URL을 직접 입력하십시오. 주소 표시 줄에 여전히 인증을 확인하는 $ _SESSION var 존재하지 않는 경우에도 페이지를 볼 수 있습니다.
정말 감사하게 생각합니다. require_once를 사용하여 호출
//this page is called (using require_once) by the page
//that captures username and password
session_start();
//requirements
require_once "../php/path.php"; //sets the server search path
require_once "constants.php"; //does all the DEFINE stuff
require_once HTML_HEADER; //loads HTML code - doc type, head etc
require_once DATABASE; //does the dB connecting
//collect the POST
$uName = $_POST[uName];
$uPsswd = $_POST[uPsswd];
//build & execute sql query
**SQL to retreive uName and password here if match then...**
$_SESSION['approved'] = 'true';
require_once MAIN_CONTENTS; //main page after authentic log in
exit;
을 인증 코드 보호 된 각 페이지
if (session_status() == PHP_SESSION_NONE) {
session_start();
}//end if
//what's the time Mr Wolf?!!!
$now = time();
//although session exists, are we logged in and approved? If not kill session & eixt.
if (isset($_SESSION['approved']) && $_SESSION['approved'] != 'true'){
require_once "killSession.php";
require_once "notAuthorised.php";
exit;
}//end if
if (!isset($_SESSION['approved'])){
require_once "killSession.php";
require_once "notAuthorised.php";
exit;
}
//if session exists, how old is it? If older than 'discard_after' then kill session.
if (isset($_SESSION['discard_after']) && $now > $_SESSION['discard_after']) {
require_once "killSession.php";
require_once "notAuthorised.php";
exit;
}//end if
else {
//logged in and approved so set timeout for 15 mins
$_SESSION['discard_after'] = $now + 30;
}//end else
문제가 가장 아마도 POST
데이터로 인해 발생
//check to make sure session exists - start if not
if (session_status() == PHP_SESSION_NONE) {
session_start();
$_SESSION['approved']='false';
}//end if
//following code caused 'headers already sent...'
//if (isset($_COOKIE[session_name()])) {
//$params = session_get_cookie_params();
//setcookie(session_name(),'',time() - 172800, '/', $params['domain'], $params['secure'], isset($params['httponly']));
//}
session_unset();
session_destroy();
session_write_close();
setcookie(session_name(),'',0,'/');
session_regenerate_id(true);
?>
빠른 응답을 보내 주셔서 감사 드리며이 문제를 해결해 주셔서 감사합니다. 코드가 내 문제를 해결하지 못했지만 BROWSER CACHE에 대한 의견은 SPOT ON이었습니다! 그래서 지금은 과 'header()'를 사용하여 페이지 캐싱을 비활성화했습니다 (크롬에서는 여전히 이상한 동작이지만 별도의 문제 임)! – noowie