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

Mammoth

Guest
Что сравним? Писи? Кто больше проверял?
Насчет мануала: я его также читал. Где там написано, про $_SESSION=array()? В записках (примерах) юзеров?
 

.des.

Поставил пиво кому надо ;-)
http://www.php.net/manual/en/function.session-unset.php

The session_unset() function frees all session variables currently registered.

Note: If $_SESSION (or $HTTP_SESSION_VARS for PHP 4.0.6 or less) is used, use unset() to unregister session variable. i.e. $_SESSION = array();

Mammoth если я не прав, я в этом признаюсь.. а тон у тебя какой то злобный :)
 

Mammoth

Guest
Извини. Просто я уже несколько устал отвечать людям, которые не видят разницу между "сессионной переменной" и "переменной в сессии".

В данном случае мануал на моей стороне - в приведенных тобой вырезках говорится всего лишь о сессионной переменной - $_SESSION ($_SESSION['var']).
 

.des.

Поставил пиво кому надо ;-)
Мда странный у тебя вывод из приведенных строк мануала...
Где ты вообще взял - такие различия сессионный файл и сессионная переменная ? ты смотрел исходники и можешь привести особенности реализации?
Мануал говорит что если я использую $_SESSION то должен воспользоватся конструкцией $_SESSION =array();
Ты же вопреки всему хочешь утверждать обратное! Ну пиши на php.net и доказывай чтобы они поправили! Я больше склонен верить мануалу.

А вот что это -
$_SESSION ($_SESSION['var'])
Это конструкция явно неправильная

Извини. Просто я уже несколько устал отвечать людям, которые не видят разницу между "сессионной переменной" и "переменной в сессии".
Пожалуйста с цитатами из мана! В чем разница.. эмирический опыт меня не интересует. Пока я разницы не обнаружил.
 

Mammoth

Guest
Почитай еще раз внимательно мануал. Там есть различия между "session variables" и "variables in session".

Насчет $_SESSION ($_SESSION['var']) - это не конструкция. Это обычная лексическая скобка... ;-)
... Хотя если ты филолог - то я пас.

Пожалуйста с цитатами из мана! В чем разница.. эмирический опыт меня не интересует. Пока я разницы не обнаружил.
Я приводил ссылку. Загляни в нее.

ЗЫ. Все-таки меня интересует такая вещь: ты точно тестил вариант с $_SESSION=array()?
 

.des.

Поставил пиво кому надо ;-)
да точно - и он абсолютно корректно работает.И я кажется догадываюсь почему у тебя он не работает - register_globals ну у меня они отключены и включены не будут. а начиная с php 4.3.0 этот баг поправят. и все будет в порядке.
 

.des.

Поставил пиво кому надо ;-)
вот исходник функции session_unset
PHP:
PHP_FUNCTION(session_unset)
{
	zval	**tmp;
	char	 *variable;
	ulong     num_key;
	
	if (PS(session_status) == php_session_none)
		RETURN_FALSE;

	if (PG(register_globals)) {
		for (zend_hash_internal_pointer_reset(&PS(vars));
				zend_hash_get_current_key(&PS(vars), &variable, &num_key, 0) == HASH_KEY_IS_STRING;
				zend_hash_move_forward(&PS(vars))) {
			if (zend_hash_find(&EG(symbol_table), variable, strlen(variable) + 1, (void **) &tmp)
					== SUCCESS)
				zend_hash_del(&EG(symbol_table), variable, strlen(variable) + 1);
		}
	}

	/* Clean $HTTP_SESSION_VARS. */
	zend_hash_clean(Z_ARRVAL_P(PS(http_session_vars)));
функция не работает с мифическим "сессионым файлом" - просто session_unset находит соответствующие глобальные переменные - а при использовании глобального массива _SESSION этого не делается. Но как я уже сказал.. это до 4.3.0
 

.des.

Поставил пиво кому надо ;-)
Что без комментариев? у тебя не работает? ну так пиши баг репорт.. а хотелось бы еще посмотреть на пример который не работает.
 

Mammoth

Guest
У меня все работает (по крайней мере в мою концепцию укладывается). Пример на котором тестилось.

1.php:
***************
PHP:
<?php
session_name('s');
session_start(); 
$var=5;
session_register("var");   
?>
<a href="http://host/2.php?s=<?=session_id() ?>">2</a>
2.php:
**************
PHP:
<?php
session_name('s');
session_start(); 
$_SESSION[]=array();
?>
<a href="http://host/3.php?s=<?=session_id() ?>">3</a>
<?php
echo isset($_SESSION['var']);
?>
3.php:
***************
PHP:
<?php
session_name('s');
session_start(); 
echo $_SESSION['var'];
if (isset($_SESSION['var']))
echo '<br>$var is set';
?>
 

.des.

Поставил пиво кому надо ;-)
Пример более чем неправильный!
это не очищает сессию а лишь добавляет еще один элемент(в данном случае пустой массив) в сессионный массив
$_SESSION[]=array();
сравни с
$_SESSION=array();

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

Mammoth

Guest
это не очищает сессию а лишь добавляет еще один элемент(в данном случае пустой массив) в сессионный массив
Блин. Ладно, тут я облажался - наверное, по инерции написал.
 

.des.

Поставил пиво кому надо ;-)
:) нет ты не облажался
Облажался это я УТРОМ с &
а это просто незаметил :)
 

Barlone

Guest
На самом деле, Mammoth прав, $_SESSION=array() не работает. Врет мануал.
 

.des.

Поставил пиво кому надо ;-)
Barlone да что ж такое... вы сговорились?
Отключи register_globals и будет тебе счастье.
И еще чтобы он работал не надо использовать session_register
 

Mammoth

Guest
.des., я так и не понял к чему тут исходник функции session_unset, но раз уж ты его привел, то не мог бы заодно привести исходник и функции zend_hash_del?
 

.des.

Поставил пиво кому надо ;-)
Mammoth
zend_hash_del это макрос вызывает функцию
ZEND API int zend_hash_del_key_or_index
ее можно найти в файле zend_hash.c уверяю тебя что там нет ни намека на работу с сессионным файлом или файлами вообще - она работает только с "таблицей переменных" скрипта.. и когда из этой таблицы нужно удалить переменную вызывается эта функция..
объяснение очень грубое но (я не филолог как ты предположил ранее).
 

.des.

Поставил пиво кому надо ;-)
.des., я так и не понял к чему тут исходник функции session_unset, но раз уж ты его привел, то не мог бы заодно привести исходник и функции zend_hash_del?
Он к тому, что ты утверждал, что эти функции работаю с сессионым файлом напряму то есть когда я вызываю session_unset - идет обращение к файлу и его очистка - так вот такого не происходит.
 

Barlone

Guest
Отключил register_globals. Работает.
Включил обратно. Не работает. Странно.

1.php
<? session_start();
$_SESSION['var']='test';
?>

2.php
<? session_start();
$_SESSION=array();
?>

3.php
<? session_start();
echo $_SESSION['var'];
?>

.des. перечитал еще раз твои сообщения, кажется понял :)
 

Mammoth

Guest
Он к тому, что ты утверждал, что эти функции работаю с сессионым файлом напряму то есть когда я вызываю session_unset - идет обращение к файлу и его очистка - так вот такого не происходит.
Прости, что запамятовал, но я не помню где я утверждал подобное.
 
Сверху