Отключение внутреннего элемента массива, присоединенного к сеансу, при использовании сеансов базы данных CodeIgniters - PullRequest
0 голосов
/ 07 октября 2011

У меня два вопроса. Оба включают поддержку сеанса CodeIgniter при использовании базы данных в качестве бэкэнда.

1. Мне интересно, есть ли способ отменить внутренний элемент массива для сеанса при использовании поддержки сеанса базы данных CodeIgniter.

Например, в стандартном PHP возможна такая функциональность:

unset($_SESSION['items'][$item_name]);

Однако CodeIgniter, похоже, работает так:

$this->session->unset_userdata('items'); // What about unsetting $item_name specifically?

2. И я не уверен, что лучший способ сброса отдельного элемента массива.

Другая вещь, которую я хотел бы сделать, это проверить, установлен ли внутренний элемент массива.

Например, в стандартном PHP возможна такая функциональность:

if (isset($_SESSION['items'][$item_name])) {
}

Но в CodeIgniter у нас есть что-то вроде этого:

if ($this->session->userdata('items') !== FALSE) {
}

1 Ответ

3 голосов
/ 07 октября 2011

Эквивалент $_SESSION в Codeigniter равен

$this->session->userdata

Это может выглядеть как одноименное имя функции

$this->session->userdata();

для вас, но на самом деле это массив, как $_SESSION. С этой информацией, давайте посмотрим на ваши конкретные вопросы:

# 1. unset an item:
unset($this->session->userdata['items'][$item_name]);

# 2. check if an item is set:
if (isset($this->session->userdata['items'][$item_name])) {
}

Если вы хотите получить к нему более легкий доступ, вы можете создать ссылку / псевдоним:

$session =& $this->session->userdata;

unset($session['items'][$item_name];

if (isset($session['items'][$item_name])) {
}

Чтобы применить изменения к переменной (ам) сеанса, вам нужно вызвать

$this->session->sess_write();

для сохранения значений в базе данных. Это лучше, чем использование функции userdata(), потому что она будет запускать запись в базу данных всякий раз, когда вы устанавливаете одно значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...