Одно решение, которое я придумал, чтобы использовать сессии, его легко использовать и его «быстро» Вас необходимо выполнить некоторый бенчмаркинг.
Поскольку я прокомментировал оба ответа выше/ниже, вы не можете получать одинаковые данные в разных контроллерах только потому, что каждый запрос «перезагружается», а для доступа к другому контроллеру вам необходимо хотя бы перезагрузить страницу. (обратите внимание, что даже вызов AJAX делает новый запрос)
Обратите внимание, что сеансы ограничены размером, у вас есть ограничение на 4 КБ (CodeIgniter хранит сеанс как Cookie), но подождите, есть способ, хранить их в БД (чтобы разрешить это идет в конфигурационный файл и включите его $config['sess_use_database'] = TRUE;
+ создать таблицу вы найдете более here)
Ну позволяет добраться до самого ответа, как я понимаю, вы не пытались extending всех контроллеров, если не сделать это и поместить некоторый код в том, что ядро/MY_Controller.php файл следующим образом:
private function _initJSONSession() { //this function should be run in MY_Controller construct() after succesful login, $this->_initJSONSession(); //ignore return values
$json_session_data = $this->session->userdata('json');
if (empty($json_session_data)) {
$json_session_data['json'] = array(); //your default array if no session json exists,
//you can also have an array inside if you like
$this->session->set_userdata($ses_data);
return TRUE; //returns TRUE so you know session is created
}
return FALSE; //returns FALSE so you know session is already created
}
вам также нужны эти несколько функций, которые они сами объясняют, все они являются общедоступными, поэтому вы можете использовать их в любом контроллере, который расширяется MY_Controller.PHP, как этот
$this->_existsSession('json');
public function _existsSession($session_name) {
$ses_data = $this->session->userdata($session_name);
if (empty($ses_data)) return FALSE;
return TRUE;
}
public function _clearSession($session_name) {
$this->session->unset_userdata($session_name);
}
public function _loadSession($session_name) {
return (($this->_existsSession($session_name)) ? $this->session->userdata($session_name) : FALSE);
}
самая интересная функция _loadSession()
, ее вид сам explainatory мне потребовалось некоторое время, чтобы полностью понять саму сессию, а в нескольких словах, которые вы должны получить (нагрузка), которые уже находятся в сеансе, что-то с ним делать ([CRUD], например, добавлять новые данные или удалять некоторые), а затем возвращать все данные в тот же сеанс (REWRITE).
Едем к примеру:
иметь в виду, что сессии, как 2d массив (я работаю с 4 + 5d массивов сам)
$session['session_name'] = 'value';
$session['json'] = array('id' => '1', 'name' => 'asok', 'some_array' => array('array_in_array' => array()), 'etcetera' => '...');
так, чтобы написать новый (переписать) предмет в сеансе вы используете
{
$session_name = 'json';
$session_data[$session_name] = $this->_loadSession($session_name);
//manipulate with array as you wish here, keep in mind that your variable is
$session_data[$session_name]['id'] = '2'; // also keep in mind all session variables are (string) type even (boolean) TRUE translates to '1'
//or create new index
$session_data[$session_name]['new_index'] = FALSE; // this retypes to (string) '0'
//now put session in place
$this->session->set_userdata($session_data);
}
, если вы хотите использовать свою собственную функцию add_data()
вам нужно сделать, это
- хорошо вам нужно передать некоторые данные, для его первого
add_data($arr = array(), $data = ''){}
например: array_unshift($arr, $data);
{
//your default array that is set to _initJSONSession() is just pure empty array();
$session_name = 'json';
$session_data[$session_name] = $this->_loadSession($session_name);
// to demonstrate I use native PHP function instead of yours add_data()
array_unshift($session_data[$session_name], 'sample-data');
$this->session->set_userdata($session_data);
unset($session_data);
}
Это это.
, пожалуйста, забудьте о глобальных переменных, вы в OOP расширьте свой класс контроллера и объявите свою «глобальную переменную» там, вы можете получить его от любого контроллера, который его расширяет. Учебник [здесь] (http://philsturgeon.co.uk/blog/2010/02/CodeIgniter-Base-Classes-Keeping-it-DRY). – Kyslik
Нет проблем, если у вас возникли проблемы с этим комментарием здесь. – Kyslik
Ну, я сделал массив глобальным, но, похоже, я не могу добавить еще один элемент. Я пробовал $ this-> global_array ['mykey'] = "Ashok"; on add_data(), но когда я показываю global_array, у меня нет этого нового элемента. –