PHP

Почему говорят про глобальный массив $GLOBALS в то же время данные передают через сессии?

Стоит задача передавать данные между php скриптами одного сайта, но
- Почему иногда записываешь данные в глобальный массив а они исчезают от туда?
- А если сессию используешь, записал данные и сессия держится открытая, а между тем пока данные пригодятся, CMS движек же сам может создавать сессии и закрывать их - выходит ты ему мешаешь тем, что открыл сессию и в конце закрыл.
- Можно же и в БД записывать, но это нужно стерилизовать массив переменный как то - что то мудрено.
1. Массив $GLOBALS содержит ВСЕ переменные, которые существуют ВНЕ функций и классов. И если ты в своём коде написал $i = 25, то в $GLOBALS появится элемент $GLOBALS['i'] равный 25. Содержимое $GLOBALS существует только во время выполнения скрипта.

2. Массив $_SESSION содержит данные, которые автоматически сохраняются при выходе из PHP-скрипта и восстанавливаются при заходе на сайт из ТОГО ЖЕ БРАУЗЕРА.

3. Идентификатор сессии либо автоматически сохраняется в куках браузера, либо (при отключении кук) автоматически же дописывается к адресам ссылок. Потому предложение записывать данные вручную в куки выглядит по меньшей мере странно: никаких дополнительных возможностей (кроме доступа к данным из браузера) это не даёт, но объём хранимых для одного сайта кук сильно ограничен.

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

5. ЗАЧЕМ закрывать сессию? Всё, что тебе нужно - вызвать session_start(). Всё остальное PHP сделает автоматически. Ручные создания / закрытия / удаления сессий нужны для очень специфичных задач, с которыми ты, скорее всего, никогда не столкнёшься.

6. Что тебе мешает найти в коде своей CMS вызовы функций session_* и самому посмотреть, что и как она делает с сессиями?
AZ
Artak Zurabyan
94 519
Лучший ответ
у каждого клиента при связи с сервером создается отдельное подключение и там своя глобальная область на стороне сервера
Инвестиционная Компания А если вот клиент А заходит на сайт, инициирует выполнение скрипта который создает сессию, потом в процессе другие скрипты тоже ее создают, это же все относится к 1 клиенту?
Да не думаю что у тебя там такая супер задача с кучей межсегментных подключений и с каким то массивом
гигантским массовом потому лучше через файл я так делаю очень надёжно. Сессии у тебя теряются сорей всего потопу что подключающийся сторона не
забывает передать ключ сессии потому скрипт открывает новые сессии проверь заголовки ответа

Простейшее решение -- самое лучшее. Можно сохранять в файл (serialize) или передавать через куки.

Сессии, насколько я помню, каждый скрипт может открывать свои, как они могут мешать друг другу?
Овик Тирабян
Овик Тирабян
10 887
Инвестиционная Компания Насчет сессии - если я открыл сессию session_start () я же вообще не задаю какие то ID "handler как бы". Откуда оно вообще знает в другом скрипте что это нужная сессия? Ведь между тем как я открыл и закрыл сессию, другой файл тоже может открыть ее и закрыть