Очистка переменной?

Mammoth

Guest
Почему ты так упорствуешь? Неужели тебе не видна выгода держать сессионные переменные в своем контейнере - причем контейнер суперглобальный и везде доступен.. и не надо заморачиваться локальная или глобальная это переменная..
Я вижу выгоду в том, что не надо смешивать два совершенно разных инструмента. Различие их может проявиться хотя бы в том, что session_is_registered('var') и isset($_SESSION['var']) могут выдать разный результат.

Моя концепция:
1. изменил содержимое сессионного файла (не сессионной переменной !) - сделай переход во избежание глюков.
2. никогда не менять $_SESSION вручную.
 

.des.

Поставил пиво кому надо ;-)
Fakir это баг.. и он fixed.
К тому же это баг при register_globals On
а они отключены! И включать их не следует.

А теперь насчет session_register и register_globals
Все равно к сессионным переменным придется обращаться как к $_SESSION["var"]; при register_globals Off
Так что смысла заморачиваться с подобными конструкциями я не вижу. Я привел пример когда $_SESSION облегчает и делает прозрачнее работу с сессией.. контраргументом был - "глупый пример"..
Мне не кажется это конструктивным диалогом... суждения из разряда "глупый пример" можно оставлять при себе.
 

Mammoth

Guest
Fakir, ты бы не мог дочитать тред, ссылку на который я привел ранее?

.des. - успокойся. Я не говорил, что не стоит работать с $_SESSION - они, действительно, несколько облегчают работу. Я говорю только, что не стОит писать конструкции вида unset ($_SESSION['var']).

Насчет "глупого примера" - что, ты взял, его из реальной программы?
 

Fakir

в работе над собой
Для того чтобы не доказывать кто прав, а кто виноват, надо заставить авторов постов писать конф. и версию php. Дабы не объяснять все прелести контейнера $_SESSION. Я больше чем уверен что Mammoth использует register_globals=on и версию php где вышеописанный баг не исправлен.
 

Mammoth

Guest
Fakir, какой "баг"? Мы вообще о другом говорим.
 

.des.

Поставил пиво кому надо ;-)
Ладно выдохнули :)
Mammoth да можно считать примером из реальной программы -Я знаю ты против такого решения, но мне не кажется оно странным - допустим ситуация иногда в зависимости от параметров мне надо зарегистрировать переменную в сессии - и позже же в ней (без релоада) получить это значение. Смысл использовать темповые переменные или что то подобное? а потом заносить их в сессию или объявлять их глобальными? при разветвленной программе можно получить неприятности в виде забыл объявить глобал.
Наверное все таки это уже флейм
 

Fakir

в работе над собой
Mammoth, subj поста. И насколько я умею читать:

>>unset - вообще не работает с сессионным файлом.

Это твое утверждение...

Выдохнули :о)
 

Mammoth

Guest
Подведение итогов. После тестирования я выяснил, что был неправ - конструкция unset($_SESSION['var']) удаляла переменную $var из сессии. Так что желающие могут пользоваться этим. Приношу свои извинения.

Fakir, от своих утверждений я не отказываюсь, но тему считаю закрытой.

Дополнительно хочу сказать, что для целей, описанных в начале треда, в ПХП имеется функция [m]session_unset[/m].
 

Barlone

Guest
Автор оригинала: Mammoth
Дополнительно хочу сказать, что для целей, описанных в начале треда, в ПХП имеется функция [m]session_unset[/m].
Там же рекомендуют использовать
PHP:
$_SESSION = array();
 

Mammoth

Guest
Еще одно дополнение: после unset($_SESSION['var']) не рекомендуется делать проверку if(session_is_registered('var')).
 

Fakir

в работе над собой
Mammoth, ты бы объяснял почему не рекомендуешь. А то это не стоит, так нельзя, лучше не надо и т.п.
А вот почему так, а не так... думайте типа сами.
Ты уж выскажи свою точку зрения,

Вот почему:
>>Еще одно дополнение: после unset($_SESSION['var']) не рекомендуется делать проверку if(session_is_registered('var')).
 

Mammoth

Guest
1. Почему не стоит делать $_SESSION=array():
причина проста как день - данная конструкция не вносит изменений в сессионный файл, так что на следующем вызове получаем глюк (восстановление значений $_SESSION).

2. Почему не стоит делать проверку if(session_is_registered('var')) после unset($_SESSION['var']):
причина также проста - данная проверка скажет о том, что переменная $var зарегистрирована в сессии. Данный "глюк" проявляется в следствие того, что unset($_SESSION['var']) не удаляет саму переменную из сессионного файла (хотя значение подчищает). Таков же, в принципе, механизм работы session_unset.
 

.des.

Поставил пиво кому надо ;-)
Mammoth по поводу if(session_is_registered('var')) после unset($_SESSION['var']): ты прав.. вообще и в мануале так написано..
Note: If $_SESSION (or $HTTP_SESSION_VARS for PHP 4.0.6 or less) is used, use isset() to check a variable is registered in $_SESSION.

А вот по поводу array() не прав. Все нормальное удаляется из сессии. И более того так рекомендует мануал.
 

Mammoth

Guest
Все высказывания я проверял у себя, а не вычитывал мануал.
 

.des.

Поставил пиво кому надо ;-)
Сравним? :)
я также
все высказывания проверял у себя, у хостера И читал мануал :)
 
Сверху