我正在尝试检查第一个$_COOKIE['one']是否存在,或者第二个$_COOKIE['two']是否存在,如果不存在,则重定向用户。
当此脚本运行时,这两个cookie中只有一个将存在。
if (!isset($_COOKIE['one']) || !isset($_COOKIE['two'])) {
header('Location: ./');
} else {
...
}我尝试了很多东西,但每次我进入这个话题时,其中一个总是存在的。
发布于 2016-11-27 06:48:07
这是一个简单的反转逻辑的例子。正如Mark指出的,您需要使用布尔&& (AND)运算符。您正在尝试查看两者是否都不存在,然后发送标头。目前,如果其中之一存在,则无论如何都要发送标头。
只需更改if (!isset($_COOKIE['one']) || !isset($_COOKIE['two'])) {
到
if (!isset($_COOKIE['one']) && !isset($_COOKIE['two'])) {
如果语句的左侧或右侧为true,则返回true。只有当语句的两个部分都为真时,And (&&)才返回true。Not(!)运算符颠倒true->false和false-> true。
isset会告诉您cookie是否存在。如果cookie存在,则返回true。您使用not on this是正确的,因为您希望它告诉您cookie是否不存在(相反)。但是,您只想在两个cookie都不存在的情况下发送标头。或者在不存在的情况下发送。
发布于 2016-11-27 07:06:19
你写了一个与你真正想要的相反的逻辑。
你说过的
你正在尝试检查
是否为
这是一个if条件。
the first $_COOKIE['one'] exists
为此,您使用了isset,您确实做到了,而且它是正确的。
第二个$_COOKIE['two'] exists是
还是
因此,您将使用OR运算符( || )
,如果不存在,则重定向用户。
这是一个else,然后使用header重定向。
将您的文字转换为文字代码,您将得到以下代码:
if (isset($_COOKIE['one']) || isset($_COOKIE['two'])) {
//... Do your thing
} else {
header('Location: ./');
}您的代码也可以使用Mark在注释中提供的修复,但在将来可能会让您感到困惑……
您也可以这样做,以避免嵌套:
if (!(isset($_COOKIE['one']) || isset($_COOKIE['two']))) {
{
header('Location: ./'); exit;
}
//... Do your thing发布于 2016-11-27 06:47:50
如果只设置了一个cookies,那么您的if条件将始终为真,因此将发生重定向。
更改&&的||,
if (!isset($_COOKIE['one']) && !isset($_COOKIE['two'])) {
header('Location: ./');
} else {
//
}https://stackoverflow.com/questions/40823914
复制相似问题