我遇到了一些問題,刪除一個php會話,我登錄時在我正在工作的網站上創建。首先這裏是我如何試圖破壞所述會話:PHP會話沒有完全刪除
在index.php頁面上有一個註銷按鈕,如果某些php代碼檢測到存在會話,則會顯示該按鈕。在調用此阿賈克斯獲得致電:
function logout()
{
var UName = "<?php echo $_SESSION['Username']; ?>";
//alert(UName);
$.ajax(
{
url: "php/logout.php",
type: "get",
success: function(jsonstr)
{
onSuccess(jsonstr);
},
error: function(XMLHttpRequest, textStatus, errorThrown)
{
alert("Status: " + textStatus);
alert("Error: " + errorThrown);
}
});
}
這就要求它有這個代碼在它logout.php文件:
<?PHP
header('Content-Type: application/json');
include_once 'login_functions.php';
include_once 'logout_functions.php';
sec_session_start();
$returnedData = logout($_SESSION['Username']);
//echo $returnedData."\n";
if ($returnedData === "true")
{
if (isset($_COOKIE[session_name()]))
{
setcookie(session_name(), 「」, time()-3600, 「/」);
}
$_SESSION = array();
session_destroy();
$_SESSION = NULL;
$data = array("loggedout" => "true");
echo json_encode($data);
exit();
}
else
{
$data = array("loggedout" => array("false" => $returnedData));
echo json_encode($data);
}
?>
註銷($用戶名)的調用只是調用該刪除功能一些與用戶會話相關的數據庫存儲值。如果它返回true,那麼將調用會話刪除代碼,並且在返回到index.php文件後提醒用戶它們正在註銷。
以防萬一它是相關的,這裏是我正在創建與sec_start_session()會議:
function sec_session_start()
{
$session_name = 'sec_session_id';
$secure = secure;
$httponly = true; //Keep Javascript from obtaining any cookie information
//echo "Function: start_sec_session \n"; //For debugging
//Force use of cookies
if (ini_set('session.use_only_cookies', 1) === FALSE)
{
}
$cookieParams = session_get_cookie_params();//Set session cookie paramaters
session_set_cookie_params($cookieParams["lifetime"], $cookieParams["path"], $cookieParams["domain"],$secure,$httponly); //Set the parameters
session_name($session_name); //Change the session name
session_start(); //Start the session
session_regenerate_id(); //Recreates the session, deletes the old one, and generates a new encryption key
}
現在,這裏的問題。每當我從管理頁面調用以下代碼片段時,session_status()函數總是返回值2,即session_active。
<?php else :?>
<div class="row">
<div class="col-xs-12">
<div class="panel panel-default">
<div class="panel-heading">
Protected Page! <?php echo session_status(); ?>
</div>
我有檢測是否存在針對用戶的會話,因爲我存儲在我的數據庫中的一些時間戳處理超時,但這個問題可能會在某個地方會導致一些問題的道路的另一種方式,我想也最小化我必須調用數據庫的次數。
我已經閱讀遍佈重載頁面的地方,一旦會話被銷燬,並且刪除的cookie應該騰出會話值,但這似乎並沒有發生在這裏。實際上有兩個頁面重新加載。
else if (rD[0] === "loggedout")
{
if (rD[1] === "true")
{
alert("You have now been logged out. The page will now reload. Please come again!");
window.location.reload();
}
else
{
document.getElementById("errpanel").style.visibility = "visible";
document.getElementById("errmsg").textContent = rD[2];
}
}
第二重裝,如果它可以被稱爲重載,發生在我去管理頁面,因爲我沒有直接鏈接到它:用戶被警告被註銷後,第一個是正確的當被列爲管理員的人沒有登錄(該鏈接無論如何都不會顯示在index.php頁面上)並且到達那裏時,我只是直接在地址欄中輸入網址。 session_status()在我關閉Waterfox並重新打開後返回2。
[why session \ _destroy()not working](http:// stackoverflow。com/questions/6472123/why-session-destroy-not-working) –