抓住$ _SESSION存储失败?

时间:2017-11-30 17:44:31

标签: php ajax session error-handling

我一直在考虑使用$_SESSION,我的想法是在一次AJAX调用期间制作一个PDO Prepared语句,然后检索它以进行后续的AJAX调用。我无法理解为什么有关的$_SESSION密钥的旧值似乎没有被新值(Prepared Statement)取代......或者更确切地说,但仅限于在第一个AJAX调用的持续时间(创建预备语句的那个​​)。

后续的AJAX调用不仅没有找到Prepared Statement,而且还倾向于显示其他键,例如,值是一个简单的字符串,也没有存储。

然后我读了that PDO Prepared Statements can't in fact be stored in $_SESSION ...所以我替换了SQL查询(即字符串)...并在$_SESSION中存储了那个 - 我的问题是已解决:我可以在下一次AJAX调用中检索它。

我觉得令人费解的是,在任何地方都没有提示此错误(存储非法内容,从而阻止密钥接受新值)。正如我所说,第一次通话允许你在通话期间存储非法的东西!

所有这些实际上让我进行了疯狂的追逐,研究PHP会话的工作原理。有没有人知道检测此错误的方法,因此可以记录/标记?

注意我已设置set_error_handlerset_exception_handler。但这个"无声错误"在调用之间似乎发生了相当惊人的事情:也就是说,当框架或其他任何东西试图序列化它现在在$_SESSION中找到的对象时...并发现它不能,所以只是挂断电话,从各方面来看,说'不,我回去了之前的$_SESSION版本"。有些PHP专家可以确认这种行为吗?

关于错误捕获级别的NB2:在最大PDO错误捕获($dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION))和最大PHP错误捕获(error_reporting(E_ALL))时会发生同样的行为。

0 个答案:

没有答案