каждый сеанс – это отдельный вызов сервера

Помня о загрузке сервера, я хочу знать, является ли каждый вызов сеанса отдельным вызовом на сервер, который увеличивает нагрузку на сервер? Позвольте мне немного объяснить это. Предположим, что на каждой 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']; 

В приведенном выше примере я могу уменьшить нагрузку на сервер, если каждый сеансовый вызов является отдельным вызовом на сервер.

Кто-нибудь разъясняет мне, что происходит, когда мы устанавливаем и получаем данные сеанса?

Solutions Collecting From Web of "каждый сеанс – это отдельный вызов сервера"

Вот разбивка сессии

  • 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']