Я реализовал авторизацию (куки + сессии). И она прекрасно работала на одном из проектов. Сейчас делаю другой проектик, перенес туда этот же скрипт и заметил ОЧЕНЬ странный, на мой взгляд, глюк!
В общем, когда проходит авторизация в сессии записывается user_id.
Хранится он в $_SESSION['id']. И по идее, если не выполнять никаких присваиваний типа "$_SESSION['id']=" - ничегошеньки ему не будет.
Но я заметил странный глюк - при просмотре (открытии) страницы с товаром получалось, что данный элемент сессии затирался на айдишник этого просмотренного товара. Но дело в том, что никаких присваиваний вида "$_SESSION['id']=" у меня в скрипте товаров нет!
Я сначала грешил на скрипт авторизации, но я вывел через print_r массив сессий в тегах <pre> - до отработки скрипта авторизации и после - id в сессии не изменился... А вот после отработки скрипта показа товара - айдишник в сессии был заменен! И единственная строчка, хотья как-то похожая на проблемную была следующая:
$id=mysql_real_escape_string($_GET['id']);
Т.е. получается что этим присваиванием я как-то задел элемент $_SESSION['id']??? Каким образом?? Разве к массиву сессий можно так обратиться, без указания $_SESSION??
В общем, я убрал это присваивание и проблема ушла...
Но почему она появлялась?
Спустя 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']? Какая между ними связь-то?
Спустя 5 дней, 1 час, 58 минут, 47 секунд (31.10.2011 - 22:54) Turboworld1 написал(а):
Вопрос актуален
Почему присваивание $id='1' должно повредить элементу массива $_SESSION['id']? Какая между ними связь?
Почему присваивание $id='1' должно повредить элементу массива $_SESSION['id']? Какая между ними связь?
Спустя 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