Помня о загрузке сервера, я хочу знать, является ли каждый вызов сеанса отдельным вызовом на сервер, который увеличивает нагрузку на сервер? Позвольте мне немного объяснить это. Предположим, что на каждой php-странице я должен установить 10 данных сеанса и также вызывать 10 сеансовых данных следующим образом:
$_SESSION['a']=1; $_SESSION['b']=2; $_SESSION['c']=3; $_SESSION['d']=4; $_SESSION['e']=5; $_SESSION['f']=6; $_SESSION['g']=7; $_SESSION['h']=8; $_SESSION['i']=9; $_SESSION['j']=10; echo $_SESSION['a']; echo $_SESSION['b']; echo $_SESSION['c']; echo $_SESSION['d']; echo $_SESSION['e']; echo $_SESSION['f']; echo $_SESSION['g']; echo $_SESSION['h']; echo $_SESSION['i']; echo $_SESSION['j'];
настройка выше 10 сеансов и вывод их же, будут ли они 20 отдельными вызовами на сервере или session_start (), все данные сеанса загружаются сразу во время загрузки страницы?
Также хотите знать, как хранить многомерный ассоциативный массив в сеансе? Предположим, что я хочу установить указанные выше данные сеанса следующим образом:
$_SESSION['mydata']=array( a=>1, b=>2, c=>3, d=>4, e=>5, f=>6, g=>7, h=>8, i=>9, j=>10 ) echo $_SESSION['mydata']['a'];
В приведенном выше примере я могу уменьшить нагрузку на сервер, если каждый сеансовый вызов является отдельным вызовом на сервер.
Кто-нибудь разъясняет мне, что происходит, когда мы устанавливаем и получаем данные сеанса?
Вот разбивка сессии
session_start();
либо создает файл сеанса на жестком диске или обращается к нему, если он уже существует. Это сериализованный массив session_write_close()
Вы можете добавить / удалить как можно больше данных после начала сеанса, потому что это не что иное, как манипулирование массивом.
Тяжелая подтяжка выполняется на session_start
и session_write_close
потому что именно тогда, когда PHP действительно имеет доступ к жесткому диску
Теоретически каждый пользователь может иметь файл сеанса 4 ГБ на сервере FAT32 или больше на сервере NTFS, но я уверен, что вы можете представить себе ужасные проблемы производительности, которые возникнут.
Выполнение всего скрипта выполняется по одному запросу. Установив $ _SESSION ['foo'] = 'bar' и $ _SESSION ['baz'] = 'biz', вы не устанавливаете два разных сеанса, а скорее две переменные сеанса.
Таким образом, весь сеанс загружается при запуске скрипта , а не на загрузке страницы (это клиентский термин).
Все это делается с помощью файлов cookie.
EDIT , чтобы ответить на ваш комментарий:
Как упоминалось в других комментариях (см. Комментарий Марка Бейкера) сеанс загружается один раз, прямо перед началом сценария и сохраняется после завершения скрипта (если вы явно не вызываете session_write_close()
),
Конечно, размер имеет значение. По-видимому, чем больше сеанс, тем дольше он будет загружен / сохранен. Но это было бы последнее, что вам хотелось бы оптимизировать.
Контрольный показатель для сессии
Для $_SESSION['mydata']['key'] = 'value'
:
session_start(); $time_begin = microtime(true); $mem_start = memory_get_usage(); for ($i=0; $i < 100000; $i++) { $_SESSION['mydata']["a$i"] = $i; } foreach ($_SESSION['mydata'] as $key => $value) { $r = $value; } $mem_end = memory_get_usage(); $time_end = microtime(true); echo "Time :"; echo $time_end - $time_begin; echo "<br>"; echo "Memory :"; echo $mem_end - $mem_start;
Мой результат о $_SESSION['mydata']['key']
:
Time :0.57849311828613 Memory :464
Для $_SESSION['key'] = 'value'
:
<?php session_start(); $time_begin = microtime(true); $mem_start = memory_get_usage(); for ($i=0; $i < 100000; $i++) { $_SESSION["a$i"] = $i; } for ($i=0; $i < 100000; $i++) { $r = $_SESSION["a$i"]; } $mem_end = memory_get_usage(); $time_end = microtime(true); echo "Time :"; echo $time_end - $time_begin; echo "<br>"; echo "Memory :"; echo $mem_end - $mem_start;
Мой результат о $_SESSION['mydata']
:
Time :0.47217416763306 Memory :176
EDITED: В первой памяти PHP Script, mydata
массивом mydata
и другими mydata
mydata. Итак, второй способ больше.
Таким образом, использование $_SESSION['key'] = 'value'
больше $_SESSION['my']['key'] = 'value'
.
Это может быть причиной того, что когда вы хотите установить значение $ _SESSION ['my'] ['key'], php должен получить $_SESSION['my']
после чего он может создать новый var. в $_SESSION['my']['key']