[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Область видимости для массива $_SESSION
Turboworld1
В общем, ситуация следующая...

Я реализовал авторизацию (куки + сессии). И она прекрасно работала на одном из проектов. Сейчас делаю другой проектик, перенес туда этот же скрипт и заметил ОЧЕНЬ странный, на мой взгляд, глюк!

В общем, когда проходит авторизация в сессии записывается user_id.
Хранится он в $_SESSION['id']. И по идее, если не выполнять никаких присваиваний типа "$_SESSION['id']=" - ничегошеньки ему не будет.

Но я заметил странный глюк - при просмотре (открытии) страницы с товаром получалось, что данный элемент сессии затирался на айдишник этого просмотренного товара. Но дело в том, что никаких присваиваний вида "$_SESSION['id']=" у меня в скрипте товаров нет!

Я сначала грешил на скрипт авторизации, но я вывел через print_r массив сессий в тегах <pre> - до отработки скрипта авторизации и после - id в сессии не изменился... А вот после отработки скрипта показа товара - айдишник в сессии был заменен! И единственная строчка, хотья как-то похожая на проблемную была следующая:

$id=mysql_real_escape_string($_GET['id']);

Т.е. получается что этим присваиванием я как-то задел элемент $_SESSION['id']??? blink.gif Каким образом?? Разве к массиву сессий можно так обратиться, без указания $_SESSION??

В общем, я убрал это присваивание и проблема ушла...

Но почему она появлялась? unsure.gif



Спустя 56 минут, 56 секунд (26.10.2011 - 14:03) redreem написал(а):
если присваивание происходило в глобальной области видимости и при этом в SESSION существовала 'id', то ничего удивительного.

Спустя 2 часа, 4 минуты, 25 секунд (26.10.2011 - 16:07) Turboworld1 написал(а):
Цитата (redreem @ 26.10.2011 - 15:03)
если присваивание происходило в глобальной области видимости и при этом в SESSION существовала 'id', то ничего удивительного.

А можно чуточку подробнее? :unsure:
Глобальная область видимости - это, скажем так "тело программы" (не внутри функции)? :blink:
Если так - тогда почему например вывод массива сессий

echo "<pre>";
print_r($_SESSION);
echo "</pre>";


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

Спустя 2 минуты, 40 секунд (26.10.2011 - 16:10) caballero написал(а):
Цитата
Не выводит всех-всех переменных, используемых в "теле программы"?



$_SESSION - обычный массив только виден внутри функций без явного указания global..
С какого перепугу он должен выводить другие переменные.

Спустя 1 час, 36 минут, 12 секунд (26.10.2011 - 17:46) redreem написал(а):
почитайте про session_register

Спустя 2 часа, 51 минута, 13 секунд (26.10.2011 - 20:37) Turboworld1 написал(а):
Цитата (redreem @ 26.10.2011 - 18:46)
почитайте про session_register

Почитал, но не понял, как это относится к моему посту =/

Спустя 17 минут, 38 секунд (26.10.2011 - 20:55) Turboworld1 написал(а):
А почему присваивание $id='1' должно повредить элементу массива $_SESSION['id']? blink.gif Какая между ними связь-то? unsure.gif

Спустя 5 дней, 1 час, 58 минут, 47 секунд (31.10.2011 - 22:54) Turboworld1 написал(а):
Вопрос актуален smile.gif
Почему присваивание $id='1' должно повредить элементу массива $_SESSION['id']? Какая между ними связь?
blink.gif

Спустя 2 минуты, 22 секунды (31.10.2011 - 22:56) Игорь_Vasinsky написал(а):
а присвоение сессионной переменной до или после $id = 1;?

и для кучи
Цитата
$id=mysql_real_escape_string($_GET['id']);

логичней:

$id= (int)$_GET['id'];

Спустя 2 часа, 46 минут, 11 секунд (1.11.2011 - 01:42) Turboworld1 написал(а):
Цитата
а присвоение сессионной переменной до или после $id = 1;?

Сначала сессия, затем идет строчка с $id
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.