Codeigniter会话值不会持久

时间:2011-07-29 14:46:28

标签: session codeigniter

**答案:我需要“反序列化”我的会话变量才能使用。啊。

$ eventTypeID = unserialize($ this-> session-> userdata('eventtypeID'));


我意识到这是一个令人讨厌的话题,但对CI来说是新手,我通过大多数文档阅读过,但在正确设置/获取会话时我必须忽略一些东西。

我已按照此帖中的配置进行操作,并确认FF正在存储Cookie:http://codeigniter.com/forums/viewthread/178904/

我的应用程序设置方式,用户从2个下拉列表中选择值,然后将这些值放入会话变量并调用新视图。在新视图中,我需要能够访问会话变量并将它们传递给查询我的数据库。就目前情况而言,当我查看查询时,没有会向其发送会话值。

非常感谢所有的帮助!谢谢!

以下编辑:似乎没有发生会话变量(数组)的设置。

以下是我的设置代码:

public function goSearch(){
            if( !empty( $_POST ) ) {
                $this->load->library('session');                
                $searchData = array(
                   'eventtypeID'  => serialize($this->input->post('pEventType')),
                   'venuecityID'  => serialize($this->input->post('pVenueCity'))                   
               );


     $this->session->set_userdata($searchData);  /*ERROR: Nothing is being set.  I've done print_r on $searchData, which returns values, but if I do:

$test = $this->session->set_userdata($searchData);  
Print_r($test);

Nothing is returned */

                  $this->_displayPublicPage('search', NULL);

               }
            }

这是我传递给查询的函数:

public function readEvents(){
        $eventTypeID = $this->session->userdata(‘eventtypeID’);
        $venueCityID = $this->session->userdata(‘venuecityID’);
        echo json_encode($this->event_model->getSearchEvents($eventTypeID, $venueCityID));
      }

这是我的模型中的查询:

public function getSearchEvents($eventTypeID, $venueCityID){           
        $eventTypeID = intval($eventTypeID);
        $venueCityID = intval($venueCityID);

        $this->db->select('*');         
        $this->db->where('event_status =', 'A');
        $this->db->where('eventtype.eventtype_id =', $eventTypeID);
        $this->db->where('city.city_id =', $venueCityID);
        $this->db->join('eventtype', 'event.fk_eventtype_id = eventtype.eventtype_id');
        $this->db->join('venue', 'event.fk_venue_id = venue.venue_id'); 
        $this->db->join('city', 'venue.fk_city_id = city.city_id'); 
        $this->db->join('tickets', 'event.event_id = tickets.fk_event_id'); 
        $this->db->from('event');

       $this->db->_compile_select();     
        $q = $this->db->get();
       echo $this->db->last_query();                
        if( $q->num_rows() > 0 ) {
            return $q->result();
        } else {
            return array();
        }

   }  

2 个答案:

答案 0 :(得分:0)

如果您使用cookie来存储会话数据,则必须在set_userdata()之后重新加载页面。这是因为cookie是在http标头内发送的。

无论如何,当你想要的是在控制器和模型或视图之间传递变量时,无需使用会话。

答案 1 :(得分:0)

一旦传过来,我的数据没有反序列化。啊。立即行动。