PHP ::: Тест скорости ::: $ _SESSION ::: unset () против пустой строки - PullRequest
3 голосов
/ 26 января 2012

У меня есть форма с несколькими полями, которая будет довольно активной.С учетом вышесказанного существует часть проверки.

Пользовательские POST и значения хранятся в переменных $ _SESSION.

При ошибке переменные $ _SESSION очищаются, что является неправильным.Я делаю это потому, что форма возвращает предыдущие значения, которые все еще верны, из соображений удобства пользователя.

Что быстрее:

$_SESSION['variable']="";

PRO -> Меньше операций для каждогоform POST
CON -> Сервер хранит больше переменных $ _SESSION в любой заданной точке.

unset($_SESSION['variable']);

PRO -> Больше операций для каждой формы POST
CON -> Сервер хранит меньше $Переменные _SESSION в любой заданной точке.

Мысли?

Ответы [ 4 ]

4 голосов
/ 26 января 2012

Вы должны unset(), так как установка его в пустую строку означает, что переменная сеанса все еще существует и указывает на место в памяти.

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

2 голосов
/ 26 января 2012

Я не уверен, что вы подразумеваете под "меньшим количеством операций для каждого сообщения формы", устанавливая для сеанса var пустую строку.Это просто модный выстрел, но я предполагаю, что вы делаете что-то вроде этого ...

foreach( $_POST as $k => $v ) {
  if( $v == 'correct value' ) {
    $_SESSION[$k] = $v;
  } else {
    if( isset($_SESSION[$k] ) unset($_SESSION[$k] );
}

Если нет, то вам, вероятно, следовало бы.Таким образом, единственными переменными сеанса, которые когда-либо были установлены (таким образом, используются ресурсы), будут те, которые являются действительными ответами, и при вероятности того, что они повторно отправят форму и получат ранее правильный ответ неправильно, она выведет ее,Затем в дальнейшем вы можете просто выполнить другой foreach, чтобы выгрузить переменные сеанса для просмотра пользователем.

Так же, как общее правило, отмена переменной предпочтительнее, чем установка ее в "", поскольку она удаляет ееиз памяти, используя меньше ресурсов.Приблизительно наносекунда, необходимая для ее переустановки, если требуется, незначительна, если вы не говорите о сотнях тысяч запросов в минуту, и это не звучит так, как вы.

Как будто этоабсолютно критично?Мех.У компании, в которой я работаю, есть переменные сеанса, которые в буквальном смысле страницы длинные, когда я делаю var_dump.По крайней мере, более 1000 экземпляров объектов, и наши серверы совершают миллионы уникальных обращений в месяц, поэтому, если вы не говорите о чем-то большем, я сомневаюсь, что это когда-нибудь действительно принесет столь заметную разницу для кого-либо.

1 голос
/ 26 января 2012

Я согласен с Алексом. Да, вам нужно повторно инициализировать переменную SESSION, но в зависимости от того, как написан интерпретатор php, они, вероятно, предварительно выделяют память, так что инициализация памяти действительно быстрая, что делает ее такой же быстрой, как и сброс строки в первую очередь. Во всяком случае, я бы просто сделал это для ясности.

1 голос
/ 26 января 2012

Используйте unset($_SESSION['variable']); для полной очистки.

Кстати, если вы не перенаправляете страницу, вам не нужно сохранять пользовательский ввод в сеансе.

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