我可以授权用户但不能将它们重定向到成员页面

时间:2013-02-14 23:06:14

标签: php wordpress-plugin wordpress

我为我的插件设计了一个登录页面,它完美地运行并检查用户凭据,但是当用户被授权时,我无法移动到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 个答案:

答案 0 :(得分:2)

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

header("Location:member.php");

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

除了在页面中提到的任何输出之前调用header()函数之外,您还应该在Location:和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。

答案 3 :(得分: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')来获取根网址:

<?php 
     wp_redirect(get_option('siteurl').'px_member234.php');
     exit;
?>