表单注销没有脚本闪存

时间:2013-05-31 20:08:25

标签: php web

好的,不确定如何在谷歌上说出来,所以我来到这里。

我有一个表单,其中包含用于注销脚本的提交按钮。当您单击它时,如果您看到网址栏,您可以看到表单所在的位置,直到我的javascript重定向在更改对会话变量生效后启动。我无法弄清楚的是facebook和其他人如何在不更改页面的情况下执行此操作并在注销完成时重定向您。

2 个答案:

答案 0 :(得分:0)

他们向注销脚本发送ajax调用

如果您使用类似的jQuery:

jQuery.ajax({
   "url":"http://www.myurl.com/logout.php",
   "dataType":"json",
   "success":function(response){
        if(response.loggedout) {
            window.location ="http://www.myurl.com/someotherpage.php"
        }
    }
});

其中php被用作后端,所有注销脚本必须做的是将用户注销,并返回类似

的内容

{"loggedout":true} 如果用户已注销(false而不是true,如果没有)

在php中你可以通过

来做到这一点
$response = array("loggedout"=>true);
echo json_encode($response);

如果您不使用jQuery(如纯javascript),则必须构建XHR请求并响应返回(google xmlheaderrequest)

答案 1 :(得分:0)

您还可以在应用程序的其余部分运行之前销毁会话。

由于PHP是无状态的,因此它不会知道之前存在的会话,因此应用程序继续运行,假设用户是" guest"。

主页示例:

<?php
session_start();
if(!empty($_GET['logout'])) session_destroy();

if(!empty($_SESSION['name'])) echo "Hello, {$_SESSION['name']}!";
else echo "You are not logged in, please login!";
?>

因此,您可以访问/index.php?logout=true,它将在应用程序的其余部分运行之前销毁会话。