【问题标题】:CakePHP flash messages triggering lateCakePHP flash 消息延迟触发
【发布时间】:2021-04-20 17:57:17
【问题描述】:

我有一个在 PHP 5.3.29 上运行的 CakePHP 2.5.1 网站(尽管我已经使用更新的 2.10.18 版本进行了测试)(我知道,旧东西)。

我遇到的问题是,看似随机的(但大多数情况下)没有显示它们应该显示的时间,而是在我重新加载页面后显示再一次(或加载不同的页面)。

例如,当用户注销时(我使用 Auth 组件),我设置了类似 $this->Session->setFlash('Logout successful'); 的 flash 消息。因此,在正常情况下,用户单击注销链接,被重定向到站点的主页,并且该消息显示为 javascript 警报。我就是这样实现的:

<?php if( $this->Session->check('Message.flash') ){ ?>
    <script type="text/javascript">alert('<?php echo $this->Session->flash(); ?>')</script>
<?php } ?> 

问题是,这种情况并非每次都会发生,只是有时会发生。其他时候,根本不会显示 Flash 消息,但如果我刷新页面(或导航到同一站点的不同页面),THEN 会显示消息。

我不知道是什么原因造成的,也不知道如何解决它,因为它似乎是随机发生的。我尝试在 core.php 文件中禁用缓存并启用调试模式 (2),但没有任何变化。该网站使用数据库会话以防万一。

任何帮助找出这种情况将不胜感激!

编辑:

原来托管服务提供商启用了一些混淆会话的 PHP-FPM 缓存设置,在他们禁用后一切正常

【问题讨论】:

  • 您尝试过不同的会话后端吗?您是否尝试过手动查询数据库以查看您的会话值是否实际存在?您是否正在使用复制?
  • @ndm 是的,我检查了数据库,那里的会话似乎很好。与托管服务提供商交谈,他们已经对 mod_expires 缓存设置进行了一些调整,现在看起来好多了,所以这可能是一个缓存问题,会继续测试。

标签: php cakephp cakephp-2.0


【解决方案1】:

我用这种方式,在setFlash中传参数,希望对你有帮助。

<!-- CONTROLLER -->
<?php
if (logout) {
    $this->Session->setFlash('Logout success!', 'default', array(), 'Success');
    return $this->redirect(array('controller' => 'path/path', 'action' => 'main'));
}
?>

<!-- VERIFICATION IN VIEW (USING BOOTSTRAP )-->
<?php if (($this->Session->check('Message.Success'))) { ?>
    <!-- START: Return message -->
    <div class="alert alert-success">
        <?php echo $this->Session->flash('Success'); ?>
    </div>
    <!-- END: Return message -->
<?php } ?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-24
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    • 2019-03-10
    • 2017-04-12
    相关资源
    最近更新 更多