【问题标题】:Is there a maximum length in Codeigniter falshdata?Codeigniter flashdata 中是否有最大长度?
【发布时间】:2012-08-02 22:56:07
【问题描述】:

我之所以这么问,是因为我想传递给下一个视图的一条愚蠢的小消息让我很生气。所以如果我这样做:

if(!$this->paypal_pro->APICallSuccessful($PayPalResult['ACK']))
        {
            var_dump($PayPalResult['ERRORS']);
            $message=array();
            foreach ($PayPalResult['ERRORS'] as $row => $error){
                // $message['flashError'][$row]['L_SHORTMESSAGE'] = $error['L_SHORTMESSAGE'];
                $message['flashError'][$row]['test'] = "The Session class permits you maintain a user's";
                // $message['flashError'][$row]['L_ERRORCODE'] = $error['L_ERRORCODE'];
                // $message['flashError'][$row]['L_LONGMESSAGE'] = $error['L_LONGMESSAGE'];
            }
            // print_r($message);
            $this->session->set_flashdata($message);

            redirect('main/Form');
        }

效果很好,但如果我这样做:

    if(!$this->paypal_pro->APICallSuccessful($PayPalResult['ACK']))
    {
        var_dump($PayPalResult['ERRORS']);
        $message=array();
        foreach ($PayPalResult['ERRORS'] as $row => $error){
            // $message['flashError'][$row]['L_SHORTMESSAGE'] = $error['L_SHORTMESSAGE'];
            $message['flashError'][$row]['test'] = "The Session class permits you maintain a user's  and track their activity while";
            // $message['flashError'][$row]['L_ERRORCODE'] = $error['L_ERRORCODE'];
            // $message['flashError'][$row]['L_LONGMESSAGE'] = $error['L_LONGMESSAGE'];
        }
        // print_r($message);
        $this->session->set_flashdata($message);

        redirect('main/Form');
    }

它不起作用。

我在这里以 main/form 显示 falshdata:

<?php if($this->session->flashdata('flashError')):?>
        <div class='flashError'>
    <?php   
        print_r($this->session->flashdata('flashError'));
    ?>
        </div>
    <?php endif?>

您可以猜到我正在尝试将 Payal 的错误消息拉到视图中以进行错误处理。 谢谢

【问题讨论】:

  • 不,我看了一遍又一遍,只是看不出两个代码示例之间的区别。是像magic eye 还是什么?我永远做不到这些事情... 编辑 哦,等一下,我现在看到了。这只是一个任意的数据差异。所以我的猜测是这个问题的答案是“不,问题可能存在于那个单引号周围的某个地方。” - 虽然我不知道为什么这会导致基于上述代码的问题。
  • 好吧,区别只是 $message['flashError'][$row]['test'] 变量中的几个字母。它显然来自这里,因为当我有一个小变量时它可以工作,当它超过 20 个字符时,它不起作用..

标签: php codeigniter session error-handling


【解决方案1】:

在 Codeigniter 中,整个会话数据的一般大小是有限的,是的。这也包括 Flash 消息。

这是因为默认情况下它适用于 cookie,并且 cookie 的大小有限。

防止这种情况的简单方法是使用基于数据库的会话或 PHP 本机会话适配器之一。

【讨论】:

  • 是的,但我的会话不是那么大,我可能有 20 个会话变量,所有内容都包含少量信息。 CI 中是否有基于本地数据库的会话?
  • 是的,您可以使用会话配置来启用基于数据库的会话。请参阅 Codeiginiter 用户指南关于会话,codeigniter.com/user_guide/libraries/sessions.html
【解决方案2】:

我在会话方面遇到了很多问题(除非您存储在数据库中,否则在 Codeigniter 中基本上是 cookies by default)。会话大小(或 cookie 大小)取决于浏览器,但我认为标准在 3k 左右 - 因此无法处理您打算执行的操作。

我不太确定将会话详细信息存储在数据库中,因此添加了native sessions library,它更容易(而且错误更少)。您仍然可以在此库中使用 CI flashdata 功能(以及设置会话数据,如 $this->session->set_userdata('foo', $foo),但它允许您像使用原生 PHP 一样使用会话即你可以 print_r($_SESSION) - 我认为你不能使用 CI 中的默认会话功能来做到这一点。

这是一个包含更多信息的帖子:CodeIgniter sessions vs PHP sessions

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    • 2011-09-12
    • 2014-08-03
    相关资源
    最近更新 更多