标题位置不起作用,仍然在保护页面

时间:2013-11-19 21:08:06

标签: php mysqli

此代码使用保护功能。进行权限访问

我看地址栏发现它仍处于保护页面

这是“保护页面”:

 foreach($access_level as $k => $v)
        {
        //  print_r($v); //   output  12    
    protect($v);// call function in loop to get the values of array 
        }
}
   global $v ;
function protect($v){

 if($_SESSION['sessionloginid']==true )
        {

        if( $v ==1)

{header(" location: http://localhost/database/agtdatabase/agt_site/display/display.php");}

        }
}

2 个答案:

答案 0 :(得分:1)

上面的@Mark B说得对。

此外 - 只有在运行时向浏览器输出 no 时才能设置标题 - 如果print_r($v),标题已经发送出去。在session_start()之后,确保您对函数的调用是最重要的一行。

<?php
session_start();
protect();

/// Other code ///

function protect() {
if($_SESSION['sessionloginid']!==true) { header("Location: http://someplace/index.php"); }
}

使用header("HTTP/1.1 403 Unauthorized" );可能是一个好主意,而不是重定向,如果您不希望用户看到该消息,除非他们在不应该的地方戳。

您也可以使用header("Location: http://someplace/",TRUE,403);同时发送403代码和重定向(因此,如果他们无法正确登录,您可能会使用针对此站点的任何API进行识别)。

答案 1 :(得分:0)

您将$v作为参数传递给函数,但函数定义没有参数:

function protect(){
                 ^---no args

PHP具有两个变量范围:local和global。你在函数中创建全局的$ v可能不会看到你在上面的foreach循环中定义的$ v。 e.g。

$v = 1; // global scope
function foo() {
   $v = 2; // local scope
   bar();
}
function bar();
   global $v;
   echo $v;  // outputs 1
}

你应该

function protect($v) {
   if ($v == .....) { ... }
}

代替。