此代码使用保护功能。进行权限访问
我看地址栏发现它仍处于保护页面
这是“保护页面”:
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");}
}
}
答案 0 :(得分:1)
此外 - 只有在运行时向浏览器输出 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 == .....) { ... }
}
代替。