0

美好的一天...我在这里遇到了一些问题,希望有人可以提供帮助

if(isset($_COOKIE['role'])== "admin")
{ echo $_COOKIE['username']; 
header("location: admin/adminUI.php");
}
elseif(isset($_COOKIE['role']) == "customer")
{ echo $_COOKIE['username']; 
header("location: customer/customerUI.php");
}

我之前设置的 PHP 中的 cookie

setcookie ("username", $username, time()+3600,"/");
setcookie ("role", $role, time()+3600,"/");

但要么我选择角色=管理员或客户,标题也将重定向到管理页面......我可以知道是什么问题吗?

谢谢

4

4 回答 4

0

如果在 header() 指令之前输出任何内容,就像使用 echo 一样,重定向根本不起作用。您需要删除回显,以便您在标头中指定的重定向有效。

此外, isset() 仅检查变量是否已设置,而不检查它是否等于另一个字符串。因此,此检查:

if(isset($_COOKIE['role'])== "admin")

是错误的,应该改为:

if(isset($_COOKIE['role']) && $_COOKIE['role'] == "admin")

最后,如前所述,您永远不应该根据 cookie 的值来检查权限,因为用户可以使用简单的客户端工具更改这些权限。改用会话。

查看 PHP 会话处理页面以获取更多信息:

http://www.php.net/manual/en/book.session.php

这是一个相对简单的示例,说明如何使用会话和 MySQL 数据库在 PHP 中对用户进行身份验证:

http://www.phpeasystep.com/phptu/6.html

于 2013-05-25T13:41:27.637 回答
0

首先,信任一个用户可以轻松编辑的 cookie 就像把你公寓的钥匙挂在你前门的显眼处。这比根本没有安全感还要糟糕。

也就是说,你不应该echo之前header()(至少在没有输出缓冲的情况下)。阅读文档中的注释header()。此外,在重定向之前回显任何内容都是没有意义的。

最后但并非最不重要的isset()问题,因为 Filippos 击败了我。

于 2013-05-25T13:43:50.607 回答
0

在这种情况下不建议使用 COOKIE。更好的方法是使用 SESSION 变量。此外,当您在下一个语句中重定向时,使用 echo 也没有意义。最后但并非最不重要的一点是,不能将 '==' 与 isset 函数一起使用。

通过这个 Isset 函数

于 2013-05-25T13:43:57.650 回答
0

这个正确的代码:

if(isset($_COOKIE['role'])&&$_COOKIE['role']== "admin")
{ 
  header("location: admin/adminUI.php");
}
elseif(isset($_COOKIE['role'])&&$_COOKIE['role'] == "customer")
{ 
  header("location: customer/customerUI.php");
}
于 2013-05-25T13:44:53.863 回答