我和我的同事很难解决这个问题。我们有一个特殊的网络商店,因为我们有客户和子客户。如果登录的人是一个子客户,我们希望在我们的页面上显示一些额外的html。这是可行的,但如果子客户注销,而普通的客户登录,额外的html仍然是可见的,但我们不明白这是怎么可能的。反之亦然:如果第一次登录是正常用户,然后注销,然后子客户登录,则额外的html是不可见的。
1. loginck.php
//用户输入他的电子邮件终端密码后,我们检查它是普通用户还是子用户。如果是正常用户,那么=> $_SESSION['multiklant'] = 0; If子用户则是=> $_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 11中测试的代码没有区别。
发布于 2015-08-05 12:51:57
是!
经过很长一段时间的探索,并尝试了你的一些建议(我们很感激,我把最有用的)我们找到了解决办法。在读了this之后,一切都变得(更清楚)了。Index.php是我们唯一有内容的页面。因此,是的,我们在那里启动一个会话,但是如果我们随后通过AJAX更改会话变量,index.php就不会跟踪这些更改。
这就是为什么我们尝试在注销后刷新页面,因此会话变量将被刷新到。那不管用。直到我们在登录后也进行了一次刷新,它才起作用,尽管对用户来说有一些页面刷新。
因此,我们将这些代码块放在单独的php文件中,并在需要时使用AJAX进行检查。
这是我们的解决办法:
1.当用户登录时:
$("#blockleveradressen").load("leveradressen.php");
var testmultiklant = $.get("testmultiklant.php");
testmultiklant.done(function (data){
if(data == 3){
$("#een").removeClass().addClass("col-md-3");
$("#twee").removeClass().addClass("col-md-3");
$("#drie").removeClass().addClass("col-md-3");
}else {
$("#een").removeClass().addClass("col-md-4");
$("#twee").removeClass().addClass("col-md-4");
$("#drie").removeClass().addClass("col-md-4");
}
});2. leveradressen.php
include "include/session.php";
include "include/MyConnect.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. testmultiklant.php
include "include/session.php";
if ($_SESSION['multiklant'] == 1) {
echo 3;
} else
{
echo 4;
}4. index.php
<div id="blockleveradressen">
</div>
<div id="een" class="col-md-4">
<label for="datepicker">Leveringsdatum*:</label><br/>
<input type="text" id="datepicker" readonly="readonly"/>
<input type="hidden" id="datepickerAlt" readonly="readonly" visible="false">
</div>
<div id="twee" class="col-md-4">
<label for="timepicker">Leveringstijdstip*:</label><br/>
<input type="text" id="timepicker" class="time"/>
</div>
<div id="drie" class="col-md-4">
<label for="betaalMethode">Betaalmethode*:</label><br/>
<select id="betaalMethode" class="form-control">
<option value="Overschrijving">Overschrijving</option>
<option value="Visa">Visa</option>
<option value="Cash">Cash</option>
</select>
</div>只需要清理代码,但这是可行的。刚刚学到了另一个教训:单页网站和php (会话更具体)不是最好的朋友:-)
发布于 2015-08-04 13:22:18
您的注销将使用exit完成标题位置。换句话说:$.get('logout.php')完成了吗?
你为什么要重定向服务器端?因此,完整的页面和脚本将被重新加载!你在等待“完成”。这样做:
在会话被销毁后,页面准备就绪,.done回调将被执行。
发布于 2015-08-04 13:09:00
在注销后查看响应头,并检查“缓存控制”。我觉得缓存有问题。
https://stackoverflow.com/questions/31809798
复制相似问题