未完全删除PHP会话
我在删除我在登录网站时创建的php会话时遇到了一些问题。首先,我试图破坏上述会话: 在index.php页面上有一个注销按钮,如果某些php代码检测到存在会话,则会显示该按钮。它调用此Ajax get调用:未完全删除PHP会话,php,ajax,session,Php,Ajax,Session,我在删除我在登录网站时创建的php会话时遇到了一些问题。首先,我试图破坏上述会话: 在index.php页面上有一个注销按钮,如果某些php代码检测到存在会话,则会显示该按钮。它调用此Ajax get调用: function logout() { var UName = "<?php echo $_SESSION['Username']; ?>"; //alert(UName);
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);
}
});
}
现在,问题来了。每当我从管理页面调用以下代码片段时,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>
第二次重新加载(如果可以称之为重新加载)发生在我转到管理页面时,因为当列为管理员的人未登录时,我没有直接链接到该页面(该链接无论如何不会显示在index.php页面上),为了到达该页面,我只需直接在地址栏中键入url。session_status()即使在我关闭Waterbox并重新打开后仍返回2。使用session_destroy()后,会销毁并删除会话cookie。并且会话不再存储在服务器上。$\u SESSION中的值可能仍然可用,但不会在下一页加载时使用
更多讨论。在我的头撞到墙上一天半之后,我决定从头开始重新构建我的会话管理系统,因为它的实现方式导致了我无法解决的问题。您应该使用它从
$\u会话中删除值
if(isset($_SESSION)) {
unset($_SESSION);
session_destroy();
}
如果不直接进入地址栏,就无法找到我在原始帖子中引用的管理页面的可能副本。这是否构成页面重新加载?如果是这样,那么会话值由于某种原因而保留。我也会在通知用户他们已经在索引页面上注销后直接重新加载页面。我尝试了所有我能找到的关于这个主题的东西,包括这个,但都没有成功。对于会话或至少根据会话状态(),服务器上的某个位置始终存在数据延迟。它永远不会返回1,始终是2,无论我如何尝试破坏会话并删除变量。@Geowil您是否尝试在登录的特定元素上使用unset
?比如unset($_SESSION['login'])代码>
<?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>
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];
}
}
if(isset($_SESSION)) {
unset($_SESSION);
session_destroy();
}