【发布时间】:2015-10-26 21:19:38
【问题描述】:
我和我的同事很难解决这个问题。我们有一种特殊的网店,因为我们有客户和子客户。如果登录的人是子客户,我们希望在我们的页面上显示一些额外的 html。这行得通,但是如果子客户注销,而普通客户登录,额外的 html 仍然可见,但我们不明白这是怎么可能的。反之亦然:如果先登录的是普通用户,然后退出,再有子用户登录,多余的html是不可见的。
1. loginck.php
//用户输入邮箱结束密码后,判断是普通用户还是子用户。
如果是普通用户,则 => $_SESSION['multiklant'] = 0;
else 子用户 then => $_SESSION['multiklant'] = 1;
否则$_SESSION['multiklant'] = 0; //user not found
2。 index.php
if ($_SESSION['multiklant'] == 1) {
$userid = $_SESSION['userid'];
echo "<div class='col-md-3'>";
echo "<label for='leveradres'>Leveradres*:</label><br/>";
echo "<select id='leveradres' class='form-control'>";
echo "<option value='0'>Selecteer...</option>";
$qry = "SELECT * FROM LEVERADRESSEN WHERE LA_EMAIL = '" . $_SESSION['klemail'] . "'";
$res = mysqli_query($link, $qry);
while ($row = mysqli_fetch_assoc($res)) {
echo "<option value='" . $row['LA_ID'] . "'>" . $row['LA_NAAM'] . "</option>";
}
echo "</select>";
echo "</div>";
}
3.1 注销点击index.php
$("#logout").click(function () {
var lgout = $.get("logout.php");
lgout.done(function (data) {
$(".show-2").trigger("click");
$("#logout").addClass("hidden");
});
});
3.2 logout.php
<?php
session_start();
$_SESSION = array();
session_unset();
session_destroy();
header("Location:index.php");
exit();
?>
如您所见,我们在这里使用了 AJAX,但即使没有问题仍然存在。如果可能,我们希望保留 AJAX,但如果没有,可以将其删除。也是一种组合,重定向不在 de php 中,而是在 javascript 部分中。
这可能是缓存问题吗?因为如果我们在没有缓存的情况下重新加载浏览器,它就可以工作。
我们已经在互联网上搜索了 6 个小时,包括这个网站...
在 MAC 上的 Chrome 和 Windows 上的 Internet Explorer 11 中测试的代码没有区别。
【问题讨论】:
-
您是否在页面上开始了会话? ` session_start();`
-
是的,并且没有错误日志表明会话是在发送标头后开始的
-
检查每一页上的
var_dump($_SEESION[])..这样你就会知道什么是问题.. -
那么如果在浏览器中手动访问logout.php url,问题是否依然存在?
-
如果它确实是一个缓存问题,您可以通过添加时间戳作为 url 参数轻松解决它,如下所示: $.get("page.php?cache_bust=" + new Date().getTime( ))