【问题标题】:set_flashdata some times not working in my codeigniter applicationset_flashdata 有时在我的 codeigniter 应用程序中不起作用
【发布时间】:2011-11-29 11:09:49
【问题描述】:

我正在使用 codeigniter,在我的控制器中我无法设置 flashdata,但我可以设置用户数据

 /**
 * this will send the requests for the gmail wrapper
 * @return void
 * @author Sandaruwan
 * */

function send_contacts()
{
    $contacts = $this->input->post('contact');
    if (count($contacts) != 0 && is_array($contacts)) 
    {   
        $data = $this->gmailmanager->send_messeges($contacts);

         echo "error message ===>"; print_r($this->message->get_message ()); echo "<br/>";

        $this->session->set_flashdata('message',$this->message->get_message ());
        echo "flash data ===>"; print_r($this->session->flashdata('message')); echo "<br/>";


        $this->session->set_userdata('user',$this->message->get_message ());
        echo "user data ===>"; print_r($this->session->userdata('user')); echo "<br/>";

        exit;

        redirect('connections/connection_inviter/invite');
    }
    else
    {
        $this->message->set_information(array(_('You have not selected a conatact!')));
        $this->session->set_flashdata('message',$this->message->get_message ());
        redirect('connections/connection_inviter/invite');  
    }
}

这是结果

    error message ===>

    Warning

        Email sending error!


    flash data ===>
    user data ===>

    Warning

        Email sending error

!

问题是我可以得到error messageuserdata 但不能得到flashdata,我不知道为什么我不能在初始化后立即得到flashdata

在某些控制器中,flashdata 可以完美运行。

更新

function invite() {
$this->load->library("connections/Outlookmanager");

print_r($this->ci->session->flashdata('message'); die;

    //Invite friends links        
$this->data['is_windows']=$this->outlookmanager->is_windows_user();
$this->load->view('connections/invite_friends', $this->data);

}

当我在function invite() 中打印flashdata 时,它没有打印。

更新

嗯嗯。其实有一个很有意思的问题,

我收到错误消息Email sending error 我将其更改为err 现在闪存数据正常工作。我再次将消息更改为Email sending error,但它再次无法正常工作。然后我再次将其更改为err 然后再次使用 flashdata 。

这是什么,我认为是错误消息长度导致了这里的问题,我不知道为什么

【问题讨论】:

  • 请告诉我你为什么要给我 (-) 。我一整天都在坚持:(
  • 也尝试了keep_flashdata但不起作用

标签: php codeigniter


【解决方案1】:

这是因为 flashdata(尽管 CI 使用“会话”一词)实际上是 cookie,因此它们仅在下一个请求时可用。

说实话,我没有看到创建后立即设置和调用 flashdatas 的原因,为什么不直接打印错误并跳过这个无用的步骤?

如果你仍然想要两者,就去做

$this->session->set_flashdata('message',$this->message->get_message());
echo $this->message->get_message();

所以你现在有一个消息,以及你以后提出的任何请求的消息

更新:

尝试调用$this实例的方法而不是$this-&gt;ci

print_r($this->session->flashdata('message');

我想我已经看到你这样做了,有时引用$this,有时引用另一个对象,IIRC 我什至回答了一个关于差异的问题。为什么?为什么你在一个位置使用$this,然后在另一个位置使用$this-&gt;ci-&gt;? 它可能没有什么区别,但至少为了保持一致性,坚持一种方式(我建议使用“常规”方式)

【讨论】:

  • ;) 实际上是在我的重定向页面 redirect('connections/connection_inviter/invite');当我尝试使用 flashdata 时,它不起作用。所以这就是为什么我试图在初始化后立即打印它。
  • 是的,但您正在重定向到 另一个页面,在那里您会找到您的 flashdata。如果您说您的会话没有打印在那里,那么您的问题根本就不清楚,因为这个问题永远不会得到解决。所以你说在“connections/connection_inviter/invite”中你没有看到 flashdatas?
  • 是的。就是这样。我在那里看不到闪存数据。请看我的更新
  • @KanishkaPanamaldeniya 可能是您达到了 cookie 允许的最大长度(通常为 4Kb),但这只是一个疯狂的猜测
  • 不要滥用该功能,用于存储少量数据;或使用数据库代替,或本机 php $_SESSION
猜你喜欢
  • 2013-08-13
  • 1970-01-01
  • 2012-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-21
相关资源
最近更新 更多