PHP使用AJAX调用注销

时间:2014-08-12 09:14:10

标签: php jquery ajax

我有一个看起来像这样的注销功能。

if ($_GET["argument"]=='logOut'){
    if(session_id() == '') {
        session_start();
    }
    session_unset();
    session_destroy();
    $host  = $_SERVER['HTTP_HOST'];
    $extra = 'index.php';
    header("Location: http://$host/$extra");
    exit; 
}

我的问题是,如果我检查页面并查看Network预览和回复,它看起来很好'。

列出了两个已处理的php文件。

http://localhost:5000/inc/mainScripts.php?argument=logOut

这是函数所在的位置。

http://localhost:5000/index.php

我希望将其重定向到哪里。

Chrome中检查页面区域的Response中的Network标签 包含完整的登录html页面login.php但在浏览器中它仍保留在同一位置。就像从未调用header命令一样。

我做错了什么?

HTML AJAX调用此函数:

        $("#logout_btn").click(function() {
            $.ajax({
                url: './inc/mainScripts.php?argument=logOut'
            })
        });

AJAX

        $("#logout_btn").click(function() {
            $.ajax({
                url: './inc/mainScripts.php?argument=logOut',
                success: function(data){
                    window.location.href = data;
                }
            });
        });

PHP

if ($_GET["argument"]=='logOut'){
    if(session_id() == '') {
        session_start();
    }
    session_unset();
    session_destroy();
    $host  = $_SERVER['HTTP_HOST'];
    $link = "http://$host/index.php";
    echo $link; 
}

2 个答案:

答案 0 :(得分:2)

试试这个。

if( isset($_GET['argument']) && $_GET['argument'] == 'logOut' && !empty( session_id() ) ) {

    session_destroy();
    header("Location: http://" . $_SERVER['HTTP_HOST'] . "/index.php");
    exit;

}

编辑:如果您正在使用AJAX,则可以更轻松地将您的php脚本中的网址发送回您的javascript并从那里重定向。

答案 1 :(得分:2)

当人们第一次开始用PHP编程时,你可能遇到了很多人遇到的同样的常见问题。

仅在没有生成HTML输出的情况下,对header()的调用才有效。如果生成任何HTML输出,即使只是一个空格,对header()的调用也将失败。要解决此问题,请使用ob_start()ob_end_flush()等功能。