首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用或不使用AJAX的php用户注销

使用或不使用AJAX的php用户注销
EN

Stack Overflow用户
提问于 2015-08-04 12:49:23
回答 3查看 124关注 0票数 3

我和我的同事很难解决这个问题。我们有一个特殊的网络商店,因为我们有客户和子客户。如果登录的人是一个子客户,我们希望在我们的页面上显示一些额外的html。这是可行的,但如果子客户注销,而普通的客户登录,额外的html仍然是可见的,但我们不明白这是怎么可能的。反之亦然:如果第一次登录是正常用户,然后注销,然后子客户登录,则额外的html是不可见的。

1. loginck.php

//用户输入他的电子邮件终端密码后,我们检查它是普通用户还是子用户。如果是正常用户,那么=> $_SESSION['multiklant'] = 0; If子用户则是=> $_SESSION['multiklant'] = 1; $_SESSION['multiklant'] = 0; //user not found

2. index.php

代码语言:javascript
复制
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

代码语言:javascript
复制
$("#logout").click(function () {
    var lgout = $.get("logout.php");
    lgout.done(function (data) {

        $(".show-2").trigger("click");
        $("#logout").addClass("hidden");

    });
});

3.2 logout.php

代码语言:javascript
复制
<?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中测试的代码没有区别。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-05 12:51:57

是!

经过很长一段时间的探索,并尝试了你的一些建议(我们很感激,我把最有用的)我们找到了解决办法。在读了this之后,一切都变得(更清楚)了。Index.php是我们唯一有内容的页面。因此,是的,我们在那里启动一个会话,但是如果我们随后通过AJAX更改会话变量,index.php就不会跟踪这些更改。

这就是为什么我们尝试在注销后刷新页面,因此会话变量将被刷新到。那不管用。直到我们在登录后也进行了一次刷新,它才起作用,尽管对用户来说有一些页面刷新。

因此,我们将这些代码块放在单独的php文件中,并在需要时使用AJAX进行检查。

这是我们的解决办法:

1.当用户登录时:

代码语言:javascript
复制
$("#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

代码语言:javascript
复制
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

代码语言:javascript
复制
include "include/session.php";

if ($_SESSION['multiklant'] == 1) {
    echo 3;
} else
{
    echo 4;
}

4. index.php

代码语言:javascript
复制
<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 (会话更具体)不是最好的朋友:-)

票数 0
EN

Stack Overflow用户

发布于 2015-08-04 13:22:18

您的注销将使用exit完成标题位置。换句话说:$.get('logout.php')完成了吗?

你为什么要重定向服务器端?因此,完整的页面和脚本将被重新加载!你在等待“完成”。这样做:

  • 删除带有标头的行并退出logout.php

在会话被销毁后,页面准备就绪,.done回调将被执行。

票数 2
EN

Stack Overflow用户

发布于 2015-08-04 13:09:00

在注销后查看响应头,并检查“缓存控制”。我觉得缓存有问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31809798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档