如果条件因其内容而改变

时间:2015-08-10 07:34:46

标签: php post

我遇到了接力有趣的问题。

我在调用的外部文件中有这个条件,并且在进程代码通过这样的BACKLINK post参数重定向到页面集之后。

if(isset($_POST['secureLogout'])) 
{
    $_POST['backlink'] = '/';
    session_destroy();
    System::WriteLog('Session has been destroyed');
} 

即使我没有发布它仍然触发的secureLogout参数,所以我尝试var_dump POST变量,没有secureLogout参数。

然后我尝试将我的POST置于条件中并退出以查看我帖子中的内容..

if(isset($_POST['secureLogout'])) 
{
    var_dump($_POST); exit();

    $_POST['backlink'] = '/';
    session_destroy();
    System::WriteLog('Session has been destroyed');
} 

现在魔法发生It does not trigger代码继续,一切正常,但我现在无法注销直接导致会话销毁前退出。

所以基本上IF内部的内容对条件有什么影响呢?

这完全是合乎逻辑的,我失去了耐心,我尝试更改帖子名称,条件但结果是一样的。

如果条件有退出,条件为假,如果没有退出条件为真。

修改

如果条件改为$ _POST [' secureLogout'] ==' secureLogout'问题仍然存在,然后我改变了条件

$_POST['secureLogout'] == 'secureLogout123'

每次都必须是假的,并且会话没有被破坏,所以我再次把出口放回去并改变状态

$_POST['secureLogout'] == 'secureLogout'

退出,条件没有tirgger所以$ _POST secureLogout参数要么不同要么设置

我已撤消退出,会话已被销毁......

3 个答案:

答案 0 :(得分:1)

检查可在phpini中发布的参数数量。也许你试图发布太多的容量溢出的变量并导致脚本崩溃。

答案 1 :(得分:0)

您所说的信息是不可能发生的,但我认为您的问题是isset()而不是if()声明。 if语句不会根据内容更改其行为。也许,secureLogout是isset,但是是空的,在这里你是你可能的解决方案:

if(!empty($_POST['secureLogout']))  {
    // empty returns true when is not set, when it's zero values, empty values, etc.
}

看到这个: http://php.net/manual/en/function.empty.php

祝你好运!

答案 2 :(得分:0)

isset仅在包含某些值时才返回true。换句话说,当变量非空时,它返回true only 。考虑0和“”是一个值。

您可以尝试使用if(!empty($_POST['secureLogout']))emptyisset的作用相同,但检查变量是否为为空。 0和“”不同于空。所以空将返回false。