使用Jquery和Ajax处理PHP会话

时间:2012-11-04 23:46:55

标签: php jquery ajax session

所以我试图弄清楚这里有什么不对!

我使用Ajax来记录和退出用户并刷新文档的某些部分。一切正常,但是当我退出时,我必须单击我的链接两次才能看到更改。

看起来我在所有指令完成后都会破坏会话。

以下是它的工作原理(或差不多!)

文件html / php

   <div id="top">  
<?php 
$top = new top();
$top->display();
?>
</div>

所以我只是调用一个类来创建文档顶部的内容,这样可以正常工作。

登录时在顶部你有登出选项和以下jquery / ajax调用

 $("#unlog").live("click",function(){
     req_content("top","user","logout","goodbye");
       });

因此,当我点击退出时,我运行了req_content()函数,这一切都运行良好

现在,当我点击它时,运行我的有点ajax_query响应者

if($ajax_action=='logout'){

     unset($_SESSION['user']);
     session_destroy();

require('class.php');

$top=new top();
$top->display();

 }

现在发生的事情是我运行查询但页面有点刷新,之后会话var被实际销毁。如果我第二次点击它,它会按预期工作,因为会话已被销毁。

任何人都可以解释这个吗?该过程与我的登录相同,并且工作正常。

req_content()函数

function req_content(box,user,action,query) {

    var xhr = getXMLHttpRequest();
    document.getElementById(box).innerHTML="<img src='img/load.gif' alt'Loading....'>";
    xhr.onreadystatechange = function() {

        if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
            document.getElementById(box).innerHTML=xhr.responseText;
        }





    };

    var sVar1 = encodeURIComponent(box);     /* Endroit ou on demande le contenu*/
    var sVar2 = encodeURIComponent(user);    /* Qui demande le contenu(facultatif)*/
    var sVar3 = encodeURIComponent(action);  /* Quel action veut-on effectuer*/
    var sVar4 = encodeURIComponent(query);   /* La requete pour efectuer l'action*/

    xhr.open("GET", "ajax_http.php?box=" + sVar1 + "&user=" + sVar2 + "&action=" + sVar3 +"&query=" + sVar4, true);
    xhr.send(null);

}

2 个答案:

答案 0 :(得分:1)

尝试在此脚本中添加重定向:

    if($ajax_action=='logout'){

         unset($_SESSION['user']);
         session_destroy();

/* HERE INSERT A REDIRECT like header("location: someurl");*/

    require('class.php');

    $top=new top();
    $top->display();

     }

答案 1 :(得分:1)

您的描述是您点击了链接。在AJAX完成之前,页面可能会令人耳目一新。

尝试:

$("#unlog").live("click", function() {
    req_content("top", "user", "logout", "goodbye");
    /* prevent browser default event on element such as link being followed, or form being submmitted*/
    return false;
});

您也可以从php中返回正常内容,而不是发回正常内容:

 print_r( $_SESSION);

作为对AJAX的回应,看看会发回什么。它将被放入您预期内容的页面中。