-1

我为我的插件设计了一个登录页面,它可以完美运行并检查用户凭据,但是当用户被授权时,我无法移动到 px_member234.php 页面。

第一个页面是 px_myplugin234.php 然后它使用用于身份验证的 include(px_login234.php) 打开 px_login234.php 文件,我想这就是标题不起作用的原因。还有其他选择吗?

<form method="post" action="">
    ....
 </form>

 authorizer(){
  ........
  if(user_is_authorized)
    {
       //go to member.php page
       header ("Location:px_member234.php");  << does not work

    }
 }

我也使用了以下但它不起作用

  echo '<script type="text/javascript">window.top.location="px_member234.php";</script>'; 
  echo '<script type="text/javascript">window.location="px_member234.php";</script>'; 
4

4 回答 4

2

您可以使用标头重定向。要使用它,您必须确保在 header 命令之前没有输出任何内容。如果标头已发送,则此代码将不起作用

header("Location:member.php");

在您的示例中,身份验证代码必须位于页面顶部。如果您无法在标头函数调用之前阻止输出,您仍然可以向 html 页面添加元重定向标头或使用 JavaScript 设置新的window.location

于 2013-02-14T23:10:06.077 回答
2

这是因为您在标题之前回显 HTML 内容。

当 PHP 看到实际输出时,它必须将所有的头刷新到 apache(后者将它们发送到客户端)。PHP 发送了标头并开始输出后,无法添加更多标头。

您的代码需要重构才能header('Location: ...')在输出任何内容之前调用

于 2013-02-14T23:11:05.703 回答
1

header()除了在页面中提到的其他输出之前调用该函数之外,您还应该Location:在 URL 和 URL 之间留一个空格。

你有什么:

header("Location:member.php");

什么会起作用:

header("Location: member.php");


更新

尝试根据HTTP/1.1 Header Field Definition包含完整的 URI 而不是您的相对 URI 。

来自 php.net:

HTTP/1.1 需要绝对 URI 作为 » Location 的参数:包括方案、主机名和绝对路径,但有些客户端接受相对 URI。您通常可以使用$_SERVER['HTTP_HOST'],$_SERVER['PHP_SELF']dirname()自己从相对的 URI 中创建一个绝对 URI。

于 2013-02-14T23:18:32.613 回答
0

在您的表单标记中,您可以添加

<form method="post" action="?noheader=true">.  

?noheader=true 将阻止 Wordpress 输出任何标题。您可以在此处查看详细信息:http: //www.lessthanweb.com/blog/wordpress-and-wp_redirect-function-problem

此外,在 wordpress 开发中,wp_redirect 优于 php 标头函数,因为它包含的钩子可以让它与其他插件很好地配合使用。

请注意,它需要您要重定向用户的绝对网址。由于您正在制作插件,因此可以使用 get_option('siteurl') 来获取根 url,以便:

<?php 
     wp_redirect(get_option('siteurl').'px_member234.php');
     exit;
?>
于 2013-02-14T23:10:17.540 回答