我遇到了一些问题,删除一个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) –