Beispiel #1
0
 /**
  * Update an existing session
  *
  * @access	public
  * @return	void
  */
 function sess_update()
 {
     // We only update the session every five minutes by default
     if ($this->userdata['last_activity'] + $this->sess_time_to_update >= $this->now) {
         return;
     }
     // Save the old session id so we know which record to
     // update in the database if we need it
     $old_sessid = $this->userdata['session_id'];
     $new_sessid = '';
     while (strlen($new_sessid) < 32) {
         $new_sessid .= mt_rand(0, mt_getrandmax());
     }
     // To make the session ID even more secure we'll combine it with the user's IP
     $new_sessid .= $this->CI->input->ip_address();
     // Turn it into a hash
     $new_sessid = md5(uniqid($new_sessid, TRUE));
     // Update the session data in the session data array
     $this->userdata['session_id'] = $new_sessid;
     $this->userdata['last_activity'] = $this->now;
     // _set_cookie() will handle this for us if we aren't using database sessions
     // by pushing all userdata to the cookie.
     $cookie_data = NULL;
     // Update the session ID and last_activity field in the DB if needed
     if ($this->sess_use_database === TRUE) {
         // set cookie explicitly to only have our session data
         $cookie_data = array();
         foreach (array('session_id', 'ip_address', 'user_agent', 'last_activity') as $val) {
             $cookie_data[$val] = $this->userdata[$val];
         }
         SessionData::update_all(array('set' => array('last_activity' => $this->now, 'session_id' => $new_sessid), 'conditions' => array('session_id = ?', $old_sessid)));
         // $this->CI->db->query($this->CI->db->update_string($this->sess_table_name,
         // 	array('last_activity' => $this->now, 'session_id' => $new_sessid), array('session_id' => $old_sessid)));
     }
     // Write the cookie
     $this->_set_cookie($cookie_data);
 }