私は今セッションで問題が発生しています。スクリプトのログインを使用して初期認証を行い、保護された各ページの先頭で認証し、最後にをログアウト(下記のコード)してみてください。ブラウザを再起動してもセッションが終了する
ファイルはPHP 5.6を使用して私のサーバ上に存在します。私は自分のPC上でWin10とChromeを使用しています。
現象:
セッションVARSが破壊されていますが、私はまだ認証を行うページを表示するために、私のブラウザで「戻る」ボタンを使用することができます。そのページに$ _SESSION変数をダンプすると(ブラウザの戻るボタンを使ってブラウズした)、$ _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;
AUTHENTICATEのCODE保護された各ページ
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