0

有没有办法选择所有请求,或者检查是否存在任何请求?

这是我想要的简单方法。

任何一个

if(所有请求都是否定){}

或者

if(任何请求都存在){//do-nothing}else{做这个}

还是不清楚?这就是我正在做的...

我有一个页面,我想让它仅供管理员使用。

$username_  = $_SESSION['username'];
$password_  = $_SESSION['password'];

if((!isset($username_) && !isset($password_)))
{
    if($_REQUEST['login'] !== 'no'){header("location: admincp.php?login=no");}
}
else
{
    $user_find  = mysql_query("SELECT * FROM users WHERE username='".$username_."' AND password='".$password_."' AND rank='admin'");
    $user_count = mysql_num_rows($user_find);

    if($user_count == 0)
    {
        if($_REQUEST['login'] !== 'access'){header("location: admincp.php?login=access");}
    }
    else
    {
        header("location: admincp.php?login=success"); // here is the problem
    }

所以分为三种人:

  1. 未登录
  2. 登录不是管理员
  3. 登录和管理

所以请求是针对

login=no为了not logged

login=access为了logged not admin

login=successfor logged and admin<-- 管理索引

else在前面的代码中,除了最后一部分之外,它将按照我的解释进行。问题出在哪里。

header("location: admincp.php?login=success");

这里发生了一个循环。如果我这样做了。

if($_REQUEST['login'] !== 'success'){header("location: admincp.php?login=success");}

我不能做其他请求。喜欢$_REQUEST['add'] == 'post'。我最后需要什么else。我想检查是否没有请求。

这是我所说的重复,我想现在很清楚了。

任何一个

if(所有请求都是否定){}

或者

if(任何请求都存在){//do-nothing}else{做这个}

4

2 回答 2

1

我认为一个好的方法是在你的表上设置一个标题为permission“admin”、“user”等值的列。

当用户登录时,根据用户 ID 获取列值并将其放在会话中。然后在标题中使用if基于您创建的会话值的语句。将非管理员用户重定向到用户页面,将未登录的用户重定向到公共页面。

于 2013-05-20T20:27:57.693 回答
0

要回答您的问题,尽管设计存在明显的安全漏洞,您可以将条件更改为:

if(isset($_REQUEST['login']) && $_REQUEST['login'] !== 'success'){
    header("location: admincp.php?login=success");
}

总的来说,我认为 switch 语句会更好地为您服务:

switch($_REQUEST['login']) {
    case 'no':
        //handle this case
        break;
    case 'access':
        //handle this case
        break;
    case 'success':
        //handle this case
        break;
}

更重要的是,请不要依赖 url 参数的值来保证安全。

于 2013-05-20T20:30:10.850 回答