我遇到了接力有趣的问题。
我在调用的外部文件中有这个条件,并且在进程代码通过这样的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参数要么不同要么设置
我已撤消退出,会话已被销毁......
答案 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.
}
祝你好运!
答案 2 :(得分:0)
isset
仅在包含某些值时才返回true。换句话说,当变量非空时,它返回true only 。考虑0和“”是一个值。
您可以尝试使用if(!empty($_POST['secureLogout']))
。 empty
与isset
的作用相同,但检查变量是否为为空。 0和“”不同于空。所以空将返回false。