Должен ли я вызывать переменную, которая содержит значение SESSION, вместо вызова фактического сеанса в PHP?

Если переменная сеанса PHP хранится в файле (как по умолчанию), то, скажем, я сохраняю имя пользователя в переменной сеанса...

$_SESSION['username'] = 'Jason Davis';

Теперь, когда страница построена, если я вызову $_SESSION['username'] 100 раз в процессе создания страницы, будет ли она обращаться к файлам сеанса и читать их 100 раз?

То же самое, но с сохранением сеанса в MySQL. Будет ли он запрашивать базу данных 100 раз, чтобы получить имя пользователя из таблицы сеансов?

Я просто пытаюсь выяснить, должен ли я вызывать переменную сеанса 1 раз на странице, а затем сохранять ее в локальной переменной и использовать ее для остальных 99 раз. Как это...

$username = $_SESSION['username'];
echo $username; // 100 times throughout all the files that build my page.

Примечание. Пожалуйста, поймите, что это всего лишь пример, на самом деле мне нужно будет получить доступ к большему, чем просто сеанс имени пользователя, и 100 раз, скорее всего, будет меньше, но распределено по нескольким ключам/значениям сеанса.


person JasonDavis    schedule 21.01.2010    source источник


Ответы (2)


Нет, данные сеанса считываются, когда вызывается session_start, и записываются либо при завершении времени выполнения скрипта, либо при session_write_close.

person Gumbo    schedule 21.01.2010
comment
Итак, если я изменю свой сеанс, чтобы использовать MySQL для хранения, и я много раз вызываю $_SESSION['username'] , он также не будет получать мой сеанс из MySQL? - person JasonDavis; 22.01.2010
comment
@jasondavis: Да, данные сеанса считываются только один раз, когда вызывается session_start, а затем сохраняются в $_SESSION. - person Gumbo; 22.01.2010

Файл читается только при вызове функции session_start().

Что касается MySQL, если вы сделаете запрос, получите имя пользователя и сохраните его в переменной, никаких дополнительных запросов, конечно, больше не будет. Если вы сохраняете что-то в переменной, это копия, и вам не нужно что-то делать с исходным значением, из которого вы это получили.

с уважением, ламы

person lamas    schedule 21.01.2010
comment
Здравствуйте, я понимаю, что храню его в переменной, чтобы он снова не попадал в БД. Мой вопрос в том, будет ли PHP-сессия повторять его снова и снова, если я НЕ буду хранить его в локальной переменной. - person JasonDavis; 22.01.2010
comment
В этом случае он просто ведет себя как Gumbo, и я сказал: вы можете делать все, что хотите, с $_SESSION, и он будет вести себя как обычная переменная, пока вы снова не вызовете функцию session_x() :) Так что нет, вам не нужно сохранить его в локальной переменной. Но если вы не хотите снова и снова писать $_SESSION, я предлагаю это сделать! - person lamas; 22.01.2010