Удаление $ _SESSION ['layout'] ['action'] глобально от всех пользователей! - PullRequest
0 голосов
/ 04 апреля 2010

Хорошо, я сохраняю переменную сеанса примерно так, чтобы загружать макеты пользователей быстрее, если она установлена ​​вместо вызова базы данных. Но поскольку макет можно изменить с помощью администратора, я хотел бы иметь возможность глобально удалить все сеансы, в которых $ _SESSION ['layout'] ['action'] установлено для всех пользователей.

$_SESSION['layout']['action'] = array(a ton of indexes and mulit-dimensional arrays);

Теперь я знаю, что он хранится в моей таблице сеансов базы данных, есть столбец для session_id, last_update и data. Итак, у меня вопрос, как удалить этот ключ массива сеанса ['action'] из всех пользователей.

Использование

$_SESSION = array();
session_destroy();

Не работает. По сути, session_start () загружается при каждой загрузке страницы, поэтому я просто хочу удалить все клавиши ['action'] из ['layout'].

Возможно ли это сделать? Спасибо

Ответы [ 2 ]

5 голосов
/ 04 апреля 2010

Хорошо, я сохраняю переменную сеанса вроде так, чтобы загрузить макеты пользователей

неправильно

Я хотел бы иметь возможность удалить глобально все сеансы, где

неправильно

хранится в моей базе данных

OMG "вместо вызова базы данных"!

Возможно ли это сделать? Спасибо

Оставьте сеансы в покое и не используйте их для глобальных настроек.

0 голосов
/ 05 апреля 2010

Если вы не хотите каждый раз обращаться к базе данных для загрузки данных конфигурации, вы можете кэшировать их в сгенерированном файле .inc.Помните, PHP - это просто текст - вы можете использовать PHP-скрипт для генерации другого PHP-скрипта:

$fh = fopen('sitevars.inc'); // skipping error handling, since this is an example.
fwrite($fh, '<' . '?php' . "\n"); // split the <? tags in case an unbalanced ' somewhere hoses things
fwrite($fh, '$lifetheuniverse = 42;' . "\n"); // single quotes to the $ doesn't have to be escaped.
fwrite($fh, "\$layoutaction = 'slap forehead with palm';\n");
fclose($fh);

, а затем вы просто include_once('sitevars.inc'); и boom, это «глобальная» переменная.Не связывайтесь с сеансами.

При этом, если ваши сеансы хранятся в базе данных, скорее всего, они в сериализованном формате.Чтобы правильно выделить отдельный «глобальный» var сеанса из каждого, вам нужно будет загрузить каждую запись, десериализовать, удалить переменную, повторно сериализовать и повторно сохранить в БД.И надеюсь, что вы не ударите чью-то сессию, которая оказывается активной в то время, когда вы делаете эти обновления.

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