我有一个看起来像这样的注销功能。
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; }
答案 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()
等功能。