Что происходит с массивом $ _SESSION, если время сеанса PHP заканчивается в середине запроса?
-
05-07-2019 - |
Вопрос
Я всегда задавался вопросом: если время сеанса PHP заканчивается во время выполнения скрипта, будет ли содержимое массива $ _SESSION оставаться доступным до тех пор, пока не закончится выполнение скрипта? Например:
session_start();
if(! isset( Я всегда задавался вопросом: если время сеанса PHP заканчивается во время выполнения скрипта, будет ли содержимое массива $ _SESSION оставаться доступным до тех пор, пока не закончится выполнение скрипта? Например:
session_start();
if(isset( Я всегда задавался вопросом: если время сеанса PHP заканчивается во время выполнения скрипта, будет ли содержимое массива $ _SESSION оставаться доступным до тех пор, пока не закончится выполнение скрипта? Например:
session_start();
if(! isset( Я всегда задавался вопросом: если время сеанса PHP заканчивается во время выполнения скрипта, будет ли содержимое массива $ _SESSION оставаться доступным до тех пор, пока не закончится выполнение скрипта? Например:
<*>
Целесообразно ли копировать переменные сеанса в локальную область видимости, чтобы я мог прочитать их позже в сценарии, не проверяя время ожидания сеанса? Что-то вроде:
<*>SESSION['name'])) {
echo 'Name is not set';
exit;
}
// imagine there is a bunch of code here and that the session times out while
// this code is being executed
echo 'Name is ', Я всегда задавался вопросом: если время сеанса PHP заканчивается во время выполнения скрипта, будет ли содержимое массива $ _SESSION оставаться доступным до тех пор, пока не закончится выполнение скрипта? Например:
<*>
Целесообразно ли копировать переменные сеанса в локальную область видимости, чтобы я мог прочитать их позже в сценарии, не проверяя время ожидания сеанса? Что-то вроде:
<*>SESSION['name']; // will this line throw an error?
Целесообразно ли копировать переменные сеанса в локальную область видимости, чтобы я мог прочитать их позже в сценарии, не проверяя время ожидания сеанса? Что-то вроде:
<*>SESSION['name'])) {
$name = Я всегда задавался вопросом: если время сеанса PHP заканчивается во время выполнения скрипта, будет ли содержимое массива $ _SESSION оставаться доступным до тех пор, пока не закончится выполнение скрипта? Например:
session_start();
if(! isset( Я всегда задавался вопросом: если время сеанса PHP заканчивается во время выполнения скрипта, будет ли содержимое массива $ _SESSION оставаться доступным до тех пор, пока не закончится выполнение скрипта? Например:
<*>
Целесообразно ли копировать переменные сеанса в локальную область видимости, чтобы я мог прочитать их позже в сценарии, не проверяя время ожидания сеанса? Что-то вроде:
<*>SESSION['name'])) {
echo 'Name is not set';
exit;
}
// imagine there is a bunch of code here and that the session times out while
// this code is being executed
echo 'Name is ', Я всегда задавался вопросом: если время сеанса PHP заканчивается во время выполнения скрипта, будет ли содержимое массива $ _SESSION оставаться доступным до тех пор, пока не закончится выполнение скрипта? Например:
<*>
Целесообразно ли копировать переменные сеанса в локальную область видимости, чтобы я мог прочитать их позже в сценарии, не проверяя время ожидания сеанса? Что-то вроде:
<*>SESSION['name']; // will this line throw an error?
Целесообразно ли копировать переменные сеанса в локальную область видимости, чтобы я мог прочитать их позже в сценарии, не проверяя время ожидания сеанса? Что-то вроде:
<*>SESSION['name'];
} else {
echo 'Name is not set';
exit;
}
// bunch of code here
echo 'Name is ', $name;
Целесообразно ли копировать переменные сеанса в локальную область видимости, чтобы я мог прочитать их позже в сценарии, не проверяя время ожидания сеанса? Что-то вроде:
<*>SESSION['name'])) {
echo 'Name is not set';
exit;
}
// imagine there is a bunch of code here and that the session times out while
// this code is being executed
echo 'Name is ', Я всегда задавался вопросом: если время сеанса PHP заканчивается во время выполнения скрипта, будет ли содержимое массива $ _SESSION оставаться доступным до тех пор, пока не закончится выполнение скрипта? Например:
<*>
Целесообразно ли копировать переменные сеанса в локальную область видимости, чтобы я мог прочитать их позже в сценарии, не проверяя время ожидания сеанса? Что-то вроде:
<*>SESSION['name']; // will this line throw an error?
Целесообразно ли копировать переменные сеанса в локальную область видимости, чтобы я мог прочитать их позже в сценарии, не проверяя время ожидания сеанса? Что-то вроде:
<*>Решение
не беспокойся о таких вещах. С сеансом ничего не случится. Он инициализируется с помощью sessioni_start ()
и $ _ SESSION
всегда будут доступны в вашем скрипте.
Другие советы
Время трехчасового сеанса по умолчанию сбрасывается при каждом открытии сеанса (см. session_cache_expire
), поэтому единственный способ, которым время ожидания сеанса может быть в середине запроса, это если запрос обрабатывается в течение трех часов. По умолчанию PHP запрашивает время ожидания только через 30 секунд, поэтому нет опасности истечения сеанса во время запроса. Кроме того, переменная $ _ SESSION
не будет внезапно меняться в середине запроса. Он заполняется, когда начинается сессия, и все.
Переменные копируются в глобальную переменную $ _SESSION при первоначальном запросе, поэтому это имеет тот же эффект, что и копирование в локальную переменную.
Однако, для ясности, имеет смысл скопировать его в локальную переменную. Особенно, если вы планируете использовать переменную несколько раз. Может быть трудно прочитать код, который имеет $ _SESSION ['variable'] повсюду.
Вам нужно было понять, как работают сессии. Клиент, обращающийся к сценарию с помощью суперглобального $ _SESSION, знает только ключ к сеансу, который ему принадлежит (хранится в Cookie / URL). Это означает, что сами данные сеанса не имеют ничего общего с клиентом. Если у вас есть ключ к данным сеанса, который вы хотите использовать, вы можете использовать его. В старых версиях PHP были некоторые дыры в безопасности, потому что сессии были где-то легко доступны (я не помню подробностей). Р>
В основном, если у вас есть идентификатор сеанса в сценарии PHP, у вас есть доступ к этому сеансу, если только память на компьютере не очищена / жесткий диск не поврежден (т.е. перезагрузка компьютера / сбой устройства).
Надеюсь, это поможет, в противном случае зайдите на php.net и углубитесь в детали работы сессий.